请问我要实现一个多表删除的功能,通过dishID删除下面三张表中的相关记录,我下面的SQL问题在哪呢?
虽然我可以通过程序的逻辑解决这个问题,但是那样的话不够简洁,而且我相信一条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);
执行结果:
Your call!
Query OK, 0 rows affected
Time: 0.002s
第三张表是空的,但是前两张表中的数据没有删除。
我做过的尝试:
1. 网上查询资料
2. chatgpt
希望获得的结果:
1. 知道我的sql问题在哪
2. 如何改正
3. 好的sql学习资源
你的语句本质上等价于:
在第三张表没有符合条件的数据的情况下,由于不符合内连接的条件(筛选出来的记录要满足所有的连接条件,即三张表内都要有该ID的记录),所以没有一条记录会被删除
如果你想做到只要有任意表内有要删除的ID就进行删除,可以使用左连接:
这样就算第三张表没有数据,前两张表内的数据还是会被删除