Sql 为什么可以';下面的查询是否删除重复的行?

Sql 为什么可以';下面的查询是否删除重复的行?,sql,oracle11g,Sql,Oracle11g,我了解到在关联查询中,子查询对主查询的每一行执行一次 table1 ------ col1 Delete from table1 a where 1<(select count(b.num1) from table1 b where b.col1=a.col1); 表1 ------ 可乐 从表1a中删除,如果使用光标或某种循环,您可能是对的 您的想法是:它将到达复制的第一个ID,删除它,当它到达另一个ID时,条件将不再为真。这是不正确的-当你用这样的where删除时,它会标

我了解到在关联查询中,子查询对主查询的每一行执行一次

table1
------
col1     

Delete from table1 a where 1<(select count(b.num1) from table1 b where b.col1=a.col1);
表1
------
可乐

从表1a中删除,如果使用光标或某种循环,您可能是对的

您的想法是:它将到达复制的第一个ID,删除它,当它到达另一个ID时,条件将不再为真。这是不正确的-当你用这样的where删除时,它会标记所有需要删除的内容,并将它们一起删除,而不是逐个删除。因此,重复的两个ID都将被标记为应该被删除

如果你使用光标或循环,那么它就会像你计划的那样


您可以在oracle中查看有关删除重复项的信息

您忽略了非常重要的一点<代码>一次全部
操作,而不是
逐行
。因此,当存在重复行时,所有行都将被删除。无论如何,使用
COUNT
,关联子查询并与1进行比较并不是最好的方法(性能)。你应该寻求更好的解决办法。