通过单一语句实现多表删除
问题:
如何通过一条 sql 语句删除三个表中与特定 id 相关的数据?
原始 sql:
delete dish, dish_flavor, setmeal_dish from dish, dish_flavor, setmeal_dish where dish.id = dish_flavor.id and dish.id = setmeal_dish.id and dish.id in (51, 52);
执行结果:
第三张表为空,前两张表中数据未删除。
原因:
原始 sql 使用的是内连接,这意味着三张表中必须都有要删除的 id 才能进行删除。在第三张表中没有数据的情况下,条件不满足,因此未删除数据。
解决方案:
可以使用左连接,即使第三张表中没有数据,也能从前两张表中删除数据。修改后的 sql 如下:
DELETE dish, dish_flavor, setmeal_dish FROM dish LEFT JOIN dish_flavor ON dish.id = dish_flavor.id LEFT JOIN setmeal_dish ON dish.id = setmeal_dish.id WHERE dish.id IN ( 51, 52 );