我从多个表中删除某些行,如下所示:
我想在删除主表中的条目后清理某些表。我知道该条目的ID(这是所有其他表中的fid),但不是每个表都包含相关数据。
这就是我提出的:
DELETE a, b, c
FROM tableA AS a
LEFT JOIN tableB AS b
ON a.fid = b.fid
LEFT JOIN tableC AS c
ON a.fid = c.fid
WHERE a.fid = 123
仅当tableA包含至少一行fID
123
当tableB
没有匹配的行时,如何删除tableC
和tableA
中的某些行?
答案 0 :(得分:2)
我认为最简单的方法是三个删除语句:
delete tableA where fid = 123;
delete tableB where fid = 123;
delete tableC where fid = 123;
如果您想将此作为一个语句执行,请使用left outer join
,但从要删除的ID列表开始:
delete a, b, c
from (select 123 as fid
) todelete left outer join
tableA a
on todelete.fid = a.fid left outer join
tableB b
on todelete.fid = b.fid left outer join
tableC c
on todelete.fid = c.fid;
答案 1 :(得分:0)
在Oracle中使用+运算符进行未经测试的查询。 检查它是否有用:
DELETE a, b, c
FROM tableA AS a , tableb as b, tableC as c
and a.fid = b.fid(+)
and a.fid = c.fid(+);