sql—如何在oracle中查找重复数据组

f0brbegy  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(421)

假设我有这样一个简单的表:

f1   |   f2
--------------
   a   |   b
   b   |   a
   a   |   c
   c   |   a
   a   |   d
   d   |   a
``` `f1` 以及 `f2` 两者在性质上是相似的,它们之间的关系顺序并不重要。我的意思是如果我说a和b有关,那么b和a有关
我需要找到重复的关系并删除它们。在这个例子中 `(a,b) , (a,c) , (a,d)` 或 `(b,a) , (c,a) , (d,a)` ,则应查找并删除这三个记录集中的一个。
任何人请给我一个查询,发现重复的数据组。
非常感谢
bn31dyow

bn31dyow1#

你可以用 exists 展示“镜像”记录:

select t.*
from mytable t
where exists (select 1 from mytable t1 where t1.f1 = t.f2 and t1.f2 = t.f1)

如果只需要其中一个副本,则:

select t.*
from mytable t
where 
    t.f1 < t.f2 
    and exists (select 1 from mytable t1 where t1.f1 = t.f2 and t1.f2 = t.f1)
cmssoen2

cmssoen22#

你可以用 EXISTS 以及 GREATER THAN 操作员如下:

SELECT * FROM YOUR_TABLE T
 WHERE EXISTS (
    SELECT 1
      FROM YOUR_TABLE T1
     WHERE T1.F1 = T.F2
       AND T1.F2 = T.F1
)
AND T1.F1 > T1.F2;

如果要删除此类重复记录,请使用 DELETE 而不是 SELECT * 在上面的查询中。

相关问题