合并MySQL多个表删除语句

时间:2014-04-07 09:28:34

标签: mysql sql sql-delete

我能够将三个删除语句(其中一个使用嵌套选择)减少到以下两个非嵌套语句中(<list>是逗号分隔的tids列表):

DELETE cs FROM cs, ds WHERE cs.did=ds.did AND ds.tid IN (<list>)
DELETE ts, ds FROM ts, ds WHERE ds.tid=ts.tid AND ts.tid IN (<list>)

第一个应找到与ds.did中的ds.tid对应的所有<list>,并删除包含这些cs的{​​{1}}中的所有行。第二个语句删除包含did中给出的ts之一的dstid的所有行。我测试了这些陈述,它们似乎有效。

但是我不喜欢两次传递相同<list>的想法。所以我想在一个声明中做同样的事情。

有没有办法合并这些陈述?

1 个答案:

答案 0 :(得分:0)

如果两个表的ConditionID相同,您应该可以使用Multiple Table Delete Syntax

型号:

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>)