2010-03-08 52 views
2

我在MySQL中有一个表中的联系信息表;MySQL,只返回两列中有重复的行

名字地址

我想运行在此表上,将只返回行与第一姓氏其在表中出现不止一次组合查询。

我不想组的“重复”(这可能只是第一个和最后一个名字的重复,但像地址或生日没有其他信息) -

我想回到所有的“复制”所以我可以查看结果并确定它们是否是愚蠢的。这似乎是一件简单的事情,但事实并非如此。

我可以找到的每个解决方案或者将这些模糊分组并且只给我一个计数(这对我所需要的结果没有用处)或根本不起作用。

这种逻辑在查询中甚至可能吗?我应该尝试在Python中执行此操作吗?

回答

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

你可以用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 
1
select * from people 
join (select firstName, lastName 
    from people 
    group by firstName, lastName 
    having count(*) > 1 
) dupe 
using (firstName, lastName)