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

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

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

本文将解决如何在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 );

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

以上就是如何通过单一语句删除多张表中符合特定条件的记录?的详细内容,更多请关注硕下网其它相关文章!