我有一张这样的表
ID nachname vorname
1 john doe
2 john doe
3 jim doe
4 Michael Knight
我需要一个查询,它将返回具有相同nachname和vorname的记录中的所有字段(select *)(在本例中为记录1和2)。 谁能帮我这个?感谢
答案 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不会出现问题。我的查询并不像我想要的那样优雅。可能有一种更简单的方法。