0

以下查询不应该适用于删除 oracle 中的重复行吗

SQL> delete from sessions o 
      where 1<=(select count(*) 
                  from sessions i 
                 where i.id!=o.id 
                   and o.data=i.data);

似乎删除了所有重复的行!(我希望保持1强硬)

4

1 回答 1

2

您的声明不起作用,因为您的表至少有一行,其中两个不同ID的 ' 共享相同的值DATA

尽管您的意图可能是查找DATA IDby的不同值ID,但您的 SQL所说的实际上是基于集合的:“将我的表视为一个整体。如果表中有任何行DATA相同,但ID是不同的(即,innerCOUNT(*)大于 0),然后DELETE是表中的每一行。”

您可能正在尝试特定的、基于行的逻辑,但您的陈述是全局的(基于集合的)。例如,其中没有任何内容可以挑出重复的行,例如 Ollie 所链接的解决方案。

于 2012-07-30T15:56:45.653 回答