Hello! 欢迎来到小浪云!


如何使用 SQL 单语句从多张表中删除数据,即使其中一张表没有匹配项?


avatar
小浪云 2024-11-11 153

如何使用 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将返回所有匹配任意连接表的记录,即使其他连接表中没有匹配项。

相关阅读