MySQL,仅返回两列之间存在重复项的行
我在MySQL中有一个联系人信息表 名,姓,地址,等 我想在此表上运行一个查询,该查询只返回表中多次出现的具有first和last name组合的行 我不想对“重复项”进行分组(可能只是名字和姓氏的重复项,而不是地址或出生日期等其他信息)- 我想返回所有“重复”行,以便查看结果并确定它们是否重复。这似乎是一件简单的事情,但事实并非如此 我能找到的每个解决方案要么将重复项分组,并只给我一个计数(这对于我需要对结果做什么没有用处),要么根本不起作用MySQL,仅返回两列之间存在重复项的行,sql,mysql,Sql,Mysql,我在MySQL中有一个联系人信息表 名,姓,地址,等 我想在此表上运行一个查询,该查询只返回表中多次出现的具有first和last name组合的行 我不想对“重复项”进行分组(可能只是名字和姓氏的重复项,而不是地址或出生日期等其他信息)- 我想返回所有“重复”行,以便查看结果并确定它们是否重复。这似乎是一件简单的事情,但事实并非如此 我能找到的每个解决方案要么将重复项分组,并只给我一个计数(这对于我需要对结果做什么没有用处),要么根本不起作用 这种逻辑在查询中可能吗?我应该试着用Python或
这种逻辑在查询中可能吗?我应该试着用Python或其他什么东西来做吗?您应该能够在子查询中使用
groupby
方法来做这件事
SELECT t.first_name, t.last_name, t.address
FROM your_table t
JOIN ( SELECT first_name, last_name
FROM your_table
GROUP BY first_name, last_name
HAVING COUNT(*) > 1
) t2
ON ( t.first_name = t2.first_name, t.last_name = t2.last_name )
子查询返回存在多次的所有名称(first\u name
和last\u name
),而JOIN
则返回与这些名称匹配的所有记录。您可以通过/have和sub-SELECT进行分组。差不多
SELECT t.*
FROM Table t INNER JOIN
(
SELECT FirstName, LastName
FROM Table
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1
) Dups ON t.FirstName = Dups.FirstName
AND t.LastName = Dups.LastName
select * from people
join (select firstName, lastName
from people
group by firstName, lastName
having count(*) > 1
) dupe
using (firstName, lastName)