繁体   English   中英

如何在 Oracle 中查找重复的数据组

[英]How to find duplicated data group in Oracle

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

  f1   |   f2
--------------
   a   |   b
   b   |   a
   a   |   c
   c   |   a
   a   |   d
   d   |   a

f1f2本质上相似,它们之间的关系顺序无关紧要。 我的意思是如果我说a与b有关,那么b与a有关

我需要找到重复的关系并删除它们。 在这个例子中(a,b), (a,c), (a,d) OR (b,a), (c,a), (d,a) ,这三个记录集之一应该被查找并且删除。

任何人请给我一个查找重复数据组的查询。

太感谢了

您可以使用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)

您可以使用EXISTSGREATER 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 *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM