首页 文章

删除表中的行基于第三个表中的列值

提问于
浏览
2

我有三个表Table1,Table2和Table3以及以下查询删除Table1中的行

delete from Table1 
where EXISTS
(select (1) from Table2
 where Table1.col1=Table2.col1
 AND   Table1.col2=Table2.col2
 AND   Table1.col3=(select **Table3.col3 from Table3** inner join Table2 on Table3.col1=Table2.col1)

这个查询是否正确?如果没有,如何在where where条件下使用第三个表?

编辑:另外,如果我们想从table2中删除自己与table3连接的行,请解释如何重写查询?

1 回答

  • 3

    这是一种方法:

    delete from table1 
    where (col1, col2, col3) in (
      select t1.col1, t1.col2, t1.col3
      from table1 t1
        join table2 t2 on t1.col1 = t2.col1 and t1.col2 = t2.col2
        join table3 t3 on t1.col3 = t3.col3 and t2.col1 = t3.col1
      );
    

    或者使用 EXISTS 可能会更快:

    delete table1 
    where exists (
      select * 
      from table2
        join table3 on table2.col1 = table3.col1
      where table1.col3 = table3.col3 and 
        table1.col1 = table2.col1 and 
        table1.col2 = table2.col2);
    

相关问题