Mysql 有人有相同的名字、中间名和姓氏吗?列出他们和他们的完整地址
我们有select语句,但无法返回超过1人。我们知道数据库中有两个人满足了这个要求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
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