我在MySQL中有一张联系信息表;
名字,姓氏,地址,等。
我想在此表格上运行一个查询,该查询只会返回多次出现在表格中的第一个和姓氏组合的行。
我不想对“重复”进行分组(这可能只是名字和姓氏的重复,而不是地址或生日等其他信息) -
我想返回所有“重复”行,以便我可以查看结果并确定它们是否是欺骗。这似乎是一件简单的事情,但事实并非如此。
我能找到的每个解决方案要么将欺骗分组,只给我一个计数(这对于我需要对结果做什么没用)或根本不起作用。
这种逻辑在查询中是否可行?我应该尝试用Python或其他东西来做这件事吗?
答案 0 :(得分:7)
您应该可以在子查询中使用GROUP BY
方法执行此操作。
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_name
和last_name
),JOIN
返回与这些名称匹配的所有记录。
答案 1 :(得分:1)
您可以使用 GROUP BY / HAVING和A 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
答案 2 :(得分:1)
select * from people
join (select firstName, lastName
from people
group by firstName, lastName
having count(*) > 1
) dupe
using (firstName, lastName)