MySQL,只返回两列中有重复的行

时间:2010-03-08 15:13:21

标签: sql mysql

我在MySQL中有一张联系信息表;

名字姓氏地址

我想在此表格上运行一个查询,该查询只会返回多次出现在表格中的第一个姓氏组合的行。

我不想对“重复”进行分组(这可能只是名字和姓氏的重复,而不是地址或生日等其他信息) -

我想返回所有“重复”行,以便我可以查看结果并确定它们是否是欺骗。这似乎是一件简单的事情,但事实并非如此。

我能找到的每个解决方案要么将欺骗分组,只给我一个计数(这对于我需要对结果做什么没用)或根本不起作用。

这种逻辑在查询中是否可行?我应该尝试用Python或其他东西来做这件事吗?

3 个答案:

答案 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_namelast_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)