登录
首页 >  数据库 >  MySQL

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

时间:2024-12-05 23:00:38 215浏览 收藏

本篇文章向大家介绍《如何通过单一语句删除多张表中符合特定条件的记录?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

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

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

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

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

到这里,我们也就讲完了《如何通过单一语句删除多张表中符合特定条件的记录?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>