2011-04-29 40 views
6

你有4個列的表格:如何查找具有相同姓氏的人?

主鍵/名/姓氏/中間名

如何編寫SQL查詢來發現人誰擁有相同的姓氏?

1 /伊萬/諾夫/諾維奇

2 /彼得/ Levinsky /亞歷山德羅

3 /亞歷克斯/諾夫/ albertovich

應返回伊凡和Alex

由於

回答

9

在標準SQL中,你可以簡單地加入表本身:

select a.name, b.name 
from t as a, t as b 
where a.surname = b.surname and a.id < b.id 

其中t是你的桌子和id是主鍵列。

這將爲具有多個條目的每個姓氏返回所有不同的名字對。

您可能需要將surname添加到選定列的列表中。

0

你想GROUP BY的姓氏,然後使用HAVING子句來找到任何> 1的組。

未經測試:

SELECT 
    name 
FROM 
    theTable 
WHERE Surname IN (
    SELECT 
     Surname 
    FROM 
     theTable 
    GROUP BY 
     Surname 
    HAVING 
     COUNT(Surname) > 1) 
+1

這不會做OP的要求(返回名字)。 – NPE 2011-04-29 08:49:46

+0

@aix - 認真嗎?我假設,如果是面試問題,他會知道一些關於SQL的知識,並能夠加入上述查詢的結果。 – Fermin 2011-04-29 08:56:33

-1
select surname,group_concat(firstname) 
from people 
group by surname 
having count(firstname)> 1; 
0

對我來說最簡單的方法是按姓氏組記錄,然後選擇那些具有計數大於1

8

如果你想找到確切的名字,那麼你應該首先找到出現超過所有姓氏一次,並找到所有的名字:

select name 
    from t 
    where surname in (select surname from t group by surname having count(surname) > 1); 
+1

+1是迄今唯一正確的答案 – Martin 2011-04-29 08:58:28

相關問題