删除多个表,其中至少有一个表为空

时间:2014-05-30 11:17:31

标签: mysql sql left-join

我从多个表中删除某些行,如下所示:

我想在删除主表中的条目后清理某些表。我知道该条目的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没有匹配的行时,如何删除tableCtableA中的某些行?

2 个答案:

答案 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(+);