Hello! 欢迎来到小浪云!


如何通过单一语句删除多张表中符合特定条件的记录?


avatar
小浪云 2024-11-11 45

如何通过单一语句删除多张表中符合特定条件的记录?

通过单一语句实现多表删除

本文将解决如何在sql语句中通过单一语句实现多表删除。

问题

有一张dish表,一个dish_flavor表和一个setmeal_dish表。需要删除dishid为51和52的所有记录。但是,使用以下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);
登录后复制

原因

此语句本质上等价于:

delete dish, dish_flavor, setmeal_dish  from     dish     join dish_flavor on dish.id = dish_flavor.id      join setmeal_dish on dish.id = setmeal_dish.id  where      dish.id in ( 51, 52 );
登录后复制

由于第三张表中没有符合条件的数据,因此不会删除任何记录。内连接要求三张表中都必须存在该id的记录,才会删除该记录。

解决方案

如果希望当有任何一张表中存在要删除的id时就进行删除,可以使用左连接:

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 );
登录后复制

这样,即使第三张表中没有数据,前两张表中的数据仍然会被删除。

相关阅读