Sql 如何找到同名的人?

Sql 如何找到同名的人?,sql,Sql,您有一个包含4列的表: 主键/姓名/姓氏/中间名 如何编写Sql查询来查找具有相同姓氏的人 1/伊万/伊万诺夫/伊万诺维奇 2/Petr/Levinsky/Aleksandrovich 3/亚历克斯/伊万诺夫/阿尔贝托维奇 应该还伊万和亚历克斯 谢谢您想按姓氏分组,然后使用HAVING子句查找任何大于1的组 未经测试: SELECT name FROM theTable WHERE Surname IN ( SELECT Surname FROM

您有一个包含4列的表:

主键/姓名/姓氏/中间名

如何编写Sql查询来查找具有相同姓氏的人

1/伊万/伊万诺夫/伊万诺维奇

2/Petr/Levinsky/Aleksandrovich

3/亚历克斯/伊万诺夫/阿尔贝托维奇

应该还伊万和亚历克斯


谢谢

您想按姓氏分组,然后使用HAVING子句查找任何大于1的组

未经测试:

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

在标准SQL中,您只需将表与其自身联接即可:

select a.name, b.name
from t as a, t as b
where a.surname = b.surname and a.id < b.id
选择a.name,b.name
从t作为a,t作为b
其中a.姓氏=b.姓氏,a.id
其中,
t
是您的表,
id
是主键列

这将返回具有多个条目的每个姓氏的所有不同的名字对


您可能需要将
姓氏添加到所选列的列表中。

对于我来说,最简单的方法是按姓氏对记录进行分组,然后选择计数大于1的记录

如果您想准确查找姓名,则应首先查找所有出现多次的姓氏,然后单击“查找所有姓名”:

select surname,group_concat(firstname)
from people
group by surname
having count(firstname)> 1;
select name
  from t
  where surname in (select surname from t group by surname having count(surname) > 1);

这不符合OP的要求(返回名字)。@aix-真的吗?我假设如果是面试问题,他会对SQL有一点了解,并且能够加入上面查询的结果。为什么a.id