2010-03-08 28 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)