Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并MySQL多表删除语句_Mysql_Sql_Sql Delete - Fatal编程技术网

合并MySQL多表删除语句

合并MySQL多表删除语句,mysql,sql,sql-delete,Mysql,Sql,Sql Delete,我能够将三条delete语句(其中一条带有嵌套select)缩减为以下两条非嵌套语句(其中是以逗号分隔的TID列表): 从cs中删除cs,其中cs.did=ds.did和ds.tid IN() 从ts中删除ts,ds,其中ds.tid=ts.tid和ts.tid IN() 第一个应该在中找到与ds.tid对应的所有ds.did,并删除cs中包含这些did的所有行。第二条语句删除包含中给出的tid之一的ts和ds的所有行。我测试了这些陈述,它们似乎有效 但是,我不喜欢将相同的传输两次。因此,我想

我能够将三条delete语句(其中一条带有嵌套select)缩减为以下两条非嵌套语句(其中
是以逗号分隔的TID列表):

从cs中删除cs,其中cs.did=ds.did和ds.tid IN()
从ts中删除ts,ds,其中ds.tid=ts.tid和ts.tid IN()
第一个应该在
中找到与
ds.tid
对应的所有
ds.did
,并删除
cs
中包含这些
did
的所有行。第二条语句删除包含
中给出的
tid
之一的
ts
ds
的所有行。我测试了这些陈述,它们似乎有效

但是,我不喜欢将相同的
传输两次。因此,我想在一份声明中也这样做


有没有合并语句的方法?

如果两个表的ConditionID相同,您应该能够使用

型号:

DELETE Table1, Table2, Table3
FROM   Table1
JOIN   Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN   Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE  Table1.ConditionID = ?;
尝试此查询:

DELETE cs, ts, ds
FROM   cs
JOIN   ds ON (cs.did = ds.did)
JOIN   ts ON (ds.tid=ts.tid)
WHERE  ts.tid IN (<list>) AND ss.tid IN (<list>)
删除cs、ts、ds
来自cs
加入ds ON(cs.did=ds.did)
连接ts ON(ds.tid=ts.tid)
其中ts.tid IN()和ss.tid IN()

是否最好改为在删除级联上定义?
DELETE cs, ts, ds
FROM   cs
JOIN   ds ON (cs.did = ds.did)
JOIN   ts ON (ds.tid=ts.tid)
WHERE  ts.tid IN (<list>) AND ss.tid IN (<list>)