合并MySQL多表删除语句
我能够将三条delete语句(其中一条带有嵌套select)缩减为以下两条非嵌套语句(其中合并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的所有行。我测试了这些陈述,它们似乎有效 但是,我不喜欢将相同的传输两次。因此,我想
是以逗号分隔的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>)