Как найти дубликаты пар в MySQL - PullRequest
4 голосов
/ 21 декабря 2011

У меня есть таблица MySQL, подобная этой:

| id1 | id2 |

| 34567 | 75879 | <---- pair1 </p>

| 13245 | 46753 |

| 75879 | 34567 | <---- pair2 </p>

| 06898 | 00013 |

с 37 000 записей.

Что такое запрос SQL или как я могу идентифицировать дубликаты пар (например, pair1 и pair2)?

Спасибо

Ответы [ 3 ]

3 голосов
/ 21 декабря 2011

, если вы хотите идентифицировать дубликаты и сосчитать их одновременно, вы можете использовать:

SELECT if(id1 < id2, id1, id2), if (id1 < id2, id2, id1), count(*)
  FROM your_table
 GROUP BY 1,2
HAVING count(*) > 1

Это не выполняет объединение, которое может быть быстрее в конце.

2 голосов
/ 21 декабря 2011

Если вы присоединитесь к столу самостоятельно, вы сможете отфильтровать те, которые вам нужны.

SELECT * 
  FROM your_table yt1,
       your_table yt2 
 WHERE (yt1.id1 = yt2.id2 AND yt1.id2 = yt1.id1)
    OR (yt1.id1 = yt2.id1 AND yt1.id2 = yt2.id2)
0 голосов
/ 26 октября 2016

Оригинальному сообщению 1000 лет, но вот другая форма:

SELECT CONCAT(d1, '/' d2) AS pair, count(*) AS total
FROM your_table
GROUP BY pair HAVING total > 1
ORDER BY total DESC;

Может или не может работать так же, как другие предложенные ответы.

...