获取MySql中重复行的列表

时间:2010-05-21 11:54:47

标签: sql mysql

我有一张这样的表

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

我需要一个查询,它将返回具有相同nachname和vorname的记录中的所有字段(select *)(在本例中为记录1和2)。 谁能帮我这个?感谢

4 个答案:

答案 0 :(得分:14)

以下查询将给出重复列表:

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。

答案 1 :(得分:11)

您问题的一般解决方案是查询表单

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 

尚未测试

答案 2 :(得分:2)

你可以通过自我加入来实现:

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是必要的,以避免ID匹配自己。 (如果每组重复项只需要1行,则可以使用t1.id<t2.id)。

答案 3 :(得分:0)

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的所有列。我建议将*更改为您需要的确切列。

编辑:我添加了一个max(id),以便group by不会出现问题。我的查询并不像我想要的那样优雅。可能有一种更简单的方法。