Mysql 有人有相同的名字、中间名和姓氏吗?列出他们和他们的完整地址

Mysql 有人有相同的名字、中间名和姓氏吗?列出他们和他们的完整地址,mysql,Mysql,我们有select语句,但无法返回超过1人。我们知道数据库中有两个人满足了这个要求 From Person P GROUP BY First_Name, Mid_Name, Last_Name HAVING COUNT(*)>1; 基于您的尝试,您可以使用聚合查询联接表: select p.* from person p inner join ( select first_name, mid_name, last_name from person group b

我们有select语句,但无法返回超过1人。我们知道数据库中有两个人满足了这个要求

From Person P
GROUP BY First_Name, Mid_Name, Last_Name
HAVING COUNT(*)>1;


基于您的尝试,您可以使用聚合查询联接表:

select p.*
from person p
inner join (
    select first_name, mid_name, last_name
    from person
    group by first_name, mid_name, last_name
    having count(*) > 1
) x 
    on x.first_name = p.first_name
    and x.mid_name = p.mid_name
    and x.last_name = p.last_name
或者,如果表中有唯一的列,例如
id
,则可以使用
exists

select p.*
from person p
where exists (
    select 1
    from person p1
    where 
        p1.id <> p.id
        and p1.first_name = p.first_name
        and p1.mid_name = p.mid_name
        and p1.last_name = p.last_name
)

为了提高这些查询的性能,您需要在
person(first\u name、mid\u name、last\u name)
(如果使用第二种解决方案,请将
id
添加到该复合索引中)。

您可以使用内部联接来实现此目的,以下查询将返回具有重复first\u name、mid\u name、last\u name的所有行:

SELECT P1.* FROM Person P1
    INNER JOIN Person P2 ON P1.id != P2.id
WHERE (
    P1.First_Name = P2.First_Name 
        AND P1.Mid_Name = P2.Mid_Name 
        AND P1.Last_Name = P2.Last_Name
    )

如果你有一张大桌子(上面有太多行),我认为这不是一个完美的解决方案

更新: 例子: 表格:

查询结果:

你的意思是有两个人的名字叫“Steven Lee SHAFFER”?我们的问题是我们使用的是mysql5.0,而它无法做到这一点functions@ShengZhang:您是否测试了这些查询?如果前两个解决方案不起作用,我会感到惊讶,即使在这个古老的MySQL版本中也是如此。
select * 
from (
    select 
        p.*,
        count(*) over(partition by first_name, mid_name, last_name) cnt
    from person p
) p
where cnt > 1       
SELECT P1.* FROM Person P1
    INNER JOIN Person P2 ON P1.id != P2.id
WHERE (
    P1.First_Name = P2.First_Name 
        AND P1.Mid_Name = P2.Mid_Name 
        AND P1.Last_Name = P2.Last_Name
    )

SELECT P1.* FROM Person P1
    INNER JOIN Person P2 ON P1.id != P2.id
                    AND P1.First_Name = P2.First_Name
                    AND P1.Mid_Name = P2.Mid_Name
                    AND P1.Last_Name = P2.Last_Name