从没有主键的表中删除记录

时间:2017-08-17 16:10:11

标签: sql oracle

我需要从数据库表中删除一些特定记录,但表本身没有主键。所以条件取决于其他表。那么这样做的正确方法是什么?

  delete from table_1 
    where exists 
         (select distinct tb.* 
          from table_1 tb, table_2 tb_2, table_3 tb_3
          where tb1.col = tb2.col
          and tb3.col = tb2.col
          and tb3.col_2= 10)

这是正确的方法吗?让我们说table_1有4列,前两列应该是要删除的标准。

1 个答案:

答案 0 :(得分:2)

如果查询的选择版本返回您要删除的结果,那么您就是好的。虽然有几件事......

使用符合ANSI的显式连接语法,而不是逗号描述的隐式语法(自折旧以来很长时间)。无论如何,显式语法看起来更好,更容易阅读。

EXISTS关联回主表。而且你不需要一个独特的,它将返回正数,无论是1个匹配的行还是100亿个。

SELECT *
FROM table_1 tb_1
WHERE EXISTS (SELECT *
              FROM table_2 tb_2
              JOIN table_3 tb_3 ON tb_2.col = tb_3.col
              WHERE tb_1.col = tb_2.col
              AND tb_3.col_2 = 10)