你有4个列的表格:如何查找具有相同姓氏的人?
主键/名/姓氏/中间名
如何编写SQL查询来发现人谁拥有相同的姓氏?
1 /伊万/诺夫/诺维奇
2 /彼得/ Levinsky /亚历山德罗
3 /亚历克斯/诺夫/ albertovich
应返回伊凡和Alex
由于
你有4个列的表格:如何查找具有相同姓氏的人?
主键/名/姓氏/中间名
如何编写SQL查询来发现人谁拥有相同的姓氏?
1 /伊万/诺夫/诺维奇
2 /彼得/ Levinsky /亚历山德罗
3 /亚历克斯/诺夫/ albertovich
应返回伊凡和Alex
由于
在标准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
添加到选定列的列表中。
你想GROUP BY的姓氏,然后使用HAVING子句来找到任何> 1的组。
未经测试:
SELECT
name
FROM
theTable
WHERE Surname IN (
SELECT
Surname
FROM
theTable
GROUP BY
Surname
HAVING
COUNT(Surname) > 1)
select surname,group_concat(firstname)
from people
group by surname
having count(firstname)> 1;
对我来说最简单的方法是按姓氏组记录,然后选择那些具有计数大于1
如果你想找到确切的名字,那么你应该首先找到出现超过所有姓氏一次,并找到所有的名字:
select name
from t
where surname in (select surname from t group by surname having count(surname) > 1);
+1是迄今唯一正确的答案 – Martin 2011-04-29 08:58:28
这不会做OP的要求(返回名字)。 – NPE 2011-04-29 08:49:46
@aix - 认真吗?我假设,如果是面试问题,他会知道一些关于SQL的知识,并能够加入上述查询的结果。 – Fermin 2011-04-29 08:56:33