如何使用 SQL 单语句从多张表中删除数据,即使其中一张表没有匹配项?
sql单语句实现多表删除
此处要实现通过单一语句从三张表中删除相关记录,目标是通过dishid执行删除操作。
提供的初始sql语句中,使用了inner join连接三个表,但由于第三张表没有任何匹配记录,导致前两张表的数据未被删除。
正确的改进方式是使用left join连接,即使第三张表没有匹配记录,也能删除前两张表中的数据。修改后的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 );
此语句将根据dishid在所有三张表中删除相关记录,无论其中哪张表存在要删除的数据。
值得注意的是,inner join和left join之间的区别在于,inner join仅匹配同时在所有连接表中找到匹配项的记录,而left join将返回所有匹配任意连接表的记录,即使其他连接表中没有匹配项。
以上就是如何使用 SQL 单语句从多张表中删除数据,即使其中一张表没有匹配项?的详细内容,更多请关注硕下网其它相关文章!