Получить список повторяющихся строк в MySql
У меня есть таблица вроде этого
ID nachname vorname
1 john doe
2 john doe
3 jim doe
4 Michael Knight
Мне нужен запрос, который вернет все поля (выберите *) из записей, которые имеют одно и то же имя и vorname (в этом случае записи 1 и 2).
Кто-нибудь может мне с этим помочь? Благодаря
Ответы
Ответ 1
Следующий запрос предоставит список дубликатов:
SELECT n1.* FROM table n1
inner join table n2 on n2.vorname=n1.vorname and n2.nachname=n1.nachname
where n1.id <> n2.id
BTW Данные, которые вы опубликовали, являются неправильными "Doe" и "Knight" - это имя, а не имя: p.
Ответ 2
Общее решение вашей проблемы - это запрос формы
SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
Это вернет одну строку для каждого набора повторяющихся строк в таблице. Последним столбцом в этом результате является количество дубликатов для определенных значений.
Если вам действительно нужен ID, попробуйте что-то вроде этого:
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
Не проверял, хотя
Ответ 3
Вы можете сделать это с помощью самоподключения:
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
необходимо избегать сопоставления идентификаторов с самим собой. (Если вы хотите только 1 строку из каждого набора дубликатов, вы можете использовать t1.id<t2.id
).
Ответ 4
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
Это должно возвращать ВСЕ столбцы из таблицы, где есть дублированное имя и vorname. Я рекомендую изменить * на точные столбцы, которые вам нужны.
Изменить: я добавил max (id), чтобы группа не была проблемой. Мой запрос не такой элегантный, как хотелось бы. Вероятно, есть более простой способ сделать это.