MySQL: поиск дубликатов в нескольких полях - PullRequest
8 голосов
/ 08 января 2011

Допустим, у меня была база данных MySQL со следующими пятью записями в таблице:

ID: 1
Field1: A
Field2: B
Field3: C

ID: 2
Field1: D
Field2: E
Field3: F

ID: 3
Field1: A
Field2: H
Field3: I

ID: 4
Field1: J
Field2: K
Field3: A

ID: 5
Field1: M
Field2: D
Field3: O

Обратите внимание, что дублируются следующие значения:

ID 1, поле 1 имеет то же значение, что и ID 3, поле 1 и ID 4, поле 3.

ID 2, поле 1 имеет то же значение, что и ID 5, поле 2.

Существует ли оператор SELECT, который может найти все вышеупомянутые дубликаты?

1 Ответ

6 голосов
/ 08 января 2011

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

ваш стол:

mysql> select * from test;
+----+--------+--------+--------+
| id | field1 | field2 | field3 |
+----+--------+--------+--------+
|  1 | A      | B      | C      |
|  2 | D      | E      | F      |
|  3 | A      | H      | I      |
|  4 | J      | K      | A      |
|  5 | M      | D      | O      |
+----+--------+--------+--------+
5 rows in set (0.00 sec)

выбор для поиска дубликатов:

mysql> select count(value) as dupe_count,value from (select field1 as value from test union all select field2 from test union all select field3 from test) as tbl group by value having count(value) > 1 order by 1 desc;
+------------+-------+
| dupe_count | value |
+------------+-------+
|          3 | A     |
|          2 | D     |
+------------+-------+
2 rows in set (0.00 sec)

в основном вы объединяете три столбца в один, а затем ищите обманщиков

...