Получите список дублирующихся строк в MySql

у меня есть таблица как это

ID     nachname     vorname
1       john         doe
2       john         doe
3       jim          doe
4       Michael     Knight

Мне нужен запрос, который возвратит все поля (выбор *) от записей, которые имеют тот же nachname и vorname (в этом случае, записи 1 и 2). Кто-либо может помочь мне с этим?Спасибо

6
задан user347033 21 May 2010 в 11:54
поделиться

4 ответа

Следующий запрос даст список дубликатов:

SELECT n1.* FROM table n1
inner join table n2 on n2.vorname=n1.vorname and n2.nachname=n1.nachname
where n1.id <> n2.id

Кстати, опубликованные вами данные кажутся неправильными. «Лань» и «Рыцарь» - это фамилия, а не имя: p.

14
ответ дан 8 December 2019 в 03:52
поделиться
select * from table AS t1 inner join
(select max(id) As id,nachname,vorname, count(*) 
from t1 group by nachname,vorname 
having count(*) >1) AS t2 on t1.id=t2.id

Это должно вернуть ВСЕ столбцы из таблицы, где есть дубликаты nachname и vorname. Я рекомендую заменить * на те столбцы, которые вам нужны.

Edit: Я добавил max (id), чтобы не было проблем с группой by. Однако мой запрос не такой элегантный, как хотелось бы. Наверное, есть более простой способ сделать это.

0
ответ дан 8 December 2019 в 03:52
поделиться

Общее решение вашей проблемы - запрос формы

SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1

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


Если вам действительно нужен идентификатор, попробуйте что-нибудь вроде этого:

SELECT id FROM 
t1, 
( SELECT col1, col2, count(*)
  FROM t1
  GROUP BY col1, col2
  HAVING count(*) > 1 ) as t2
WHERE t1.col1 = t2.col1 AND t1.col2 = t2.col2 

Хотя не проверял

11
ответ дан 8 December 2019 в 03:52
поделиться

Вы можете сделать это с помощью самосоединения:

select distinct t1.id from t as t1 inner join t as t2 
on t1.col1=t2.col1 and t1.col2=t2.col2 and t1.id<>t2.id

t1.id <> t2.id необходимо, чтобы идентификаторы не совпадали друг с другом. (Если вам нужна только одна строка из каждого набора дубликатов, вы можете использовать t1.id ).

2
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: