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

如何使用 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 单语句从多张表中删除数据,即使其中一张表没有匹配项?的详细内容,更多请关注硕下网其它相关文章!