2011-04-29 92 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

相关问题