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

Sql 从没有主键的表中删除记录,sql,oracle,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

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

  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)

这样做对吗?假设表_1有4列,前两列应该是要删除的条件。

如果查询的select版本返回要删除的结果,那么就可以了。不过有几件事

使用符合ANSI标准的显式联接语法,而不是逗号表示的隐式语法(这种语法早就过时了)。不管怎样,显式语法看起来更好,更易于阅读

将您的
存在关联回主表。你不需要一个明显的,它会返回正的值,无论是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)

这是正确的方法。我建议首先运行select查询,并验证返回的记录是否确实是要删除的记录。您需要关联子查询。如前所述,如果子查询返回一行,
表1
中的所有行都将被删除。