我能够将三个删除语句(其中一个使用嵌套选择)减少到以下两个非嵌套语句中(<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
之一的ds
和tid
的所有行。我测试了这些陈述,它们似乎有效。
但是我不喜欢两次传递相同<list>
的想法。所以我想在一个声明中做同样的事情。
有没有办法合并这些陈述?
答案 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>)