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

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

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

问题

有一张dish表,一个dish_flavor表和一个setmeal_dish表。需要删除dishid为51和52的所有记录。但是,使用以下sql语句时,并没有删除相应记录:
image.png
原因

此语句本质上等价于:
image.png
由于第三张表中没有符合条件的数据,因此不会删除任何记录。内连接要求三张表中都必须存在该id的记录,才会删除该记录。

解决方案

如果希望当有任何一张表中存在要删除的id时就进行删除,可以使用左连接:
image.png
这样,即使第三张表中没有数据,前两张表中的数据仍然会被删除。

相关文章
|
6月前
|
存储 关系型数据库 索引
10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?
在非主键字段上创建索引,查询数据通常需两次。对于MyISAM,先通过索引找到数据行指针,再获取数据;而InnoDB则先找主键ID,再从主键索引中查找数据。
43 0
|
4月前
|
存储 关系型数据库 MySQL
如何获知表中数据被删除
如何获知表中数据被删除
51 4
|
6月前
|
SQL 存储 关系型数据库
group by语句查询如何确保保留重复数据
group by语句查询如何确保保留重复数据
92 0
|
SQL
**SQL某一表中重复某一字段重复记录查询与处理
sql某一表中重复某一字段重复记录查询与处理   1.查询出重复记录  select 重复记录字段 form  数据表 group by houseno having count(重复记录字段)>1 2.
956 0
|
数据库 索引
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
设计数据库唯一索引时,经常会碰到唯一删除的键值,导致很难处理,这里就简单介绍一种巧办法,帮你快速解决该问题
1991 0
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
|
SQL 关系型数据库 索引
|
SQL 存储 数据库
浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因
原文:浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因    本文出处:http://www.cnblogs.com/wy123/p/6189100.html        标题有点拗口,来源于一个开发人员遇到的实际问题  先抛出问题:一个查询没有明确指定排序方式,那么,第二次执行这个同样的查询的时候,查询结果会不会与第一次的查询结果排序方式完全一样?  答案是不确定的,两个完全一样的查询,结果也完全一样,两次(多次)查询结果的排序方式有可能一致,有可能不一致。
1748 0
下一篇
无影云桌面