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

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

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

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

bn31dyow1#

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

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

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

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

cmssoen22#

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

  1. SELECT * FROM YOUR_TABLE T
  2. WHERE EXISTS (
  3. SELECT 1
  4. FROM YOUR_TABLE T1
  5. WHERE T1.F1 = T.F2
  6. AND T1.F2 = T.F1
  7. )
  8. AND T1.F1 > T1.F2;

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

相关问题