Как найти повторяющуюся группу данных в Oracle - PullRequest
0 голосов
/ 19 июня 2020

Предположим, что у меня есть простая таблица вроде этой:

  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) OR (b,a) , (c,a) , (d,a), один из этих трех наборов записей должен быть найден и удален.

Кто-нибудь, пожалуйста, дайте мне запрос, который находит повторяющуюся группу данных.

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Вы можете использовать операторы 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 * в приведенном выше запросе.

0 голосов
/ 19 июня 2020

Вы можете использовать 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)
...