Mysql 如何仅选择共享姓氏的人?SQL
我对使用数据库还是相当陌生的,这个问题一直困扰着我 我有一个包含名字和姓氏列的人员表。我正在尝试创建一个查询,该查询将只选择表中与其他人共享姓氏的人 例如,如果我有以下两列:Mysql 如何仅选择共享姓氏的人?SQL,mysql,sql,Mysql,Sql,我对使用数据库还是相当陌生的,这个问题一直困扰着我 我有一个包含名字和姓氏列的人员表。我正在尝试创建一个查询,该查询将只选择表中与其他人共享姓氏的人 例如,如果我有以下两列: First_Name Last_Name John Doe Jane Doe Mary Shmo Kate Shmo Matt Diego Joe Smith 我想要的结果是:
First_Name Last_Name
John Doe
Jane Doe
Mary Shmo
Kate Shmo
Matt Diego
Joe Smith
我想要的结果是:
First_Name Last_name
John Doe
Jane Doe
Mary Shmo
Kate Shmo
我的密码是:
select count(*), last_name, first_name
from people
group by last_name
having count(*) > 1
这将获取共享的姓氏,但只输出其中一个,而不是所有的名字
我确信有一个简单的解决方法,但我无法解决。您可以使用子查询来完成此操作:
select p.*
from people as p
inner join (
select last_name
from people
group by last_name
having count(first_name) > 1
) as a on p.last_name = a.last_name
你快到了。现在您已经有了您关心的一组姓氏,只需围绕该姓氏包装另一个查询:
select * from people
where last_name in
(
select last_name
from people
group by last_name
having count(*) > 1
)
谢谢如果你运行内部查询,你会看到你关心的姓氏。外部查询说“给我所有姓氏与内部查询匹配的人”。还有一些其他的方法可以做到这一点——内部连接,比如Barranka的答案,或者
存在
,或者可能更多。我只喜欢中的,因为它很好,很清楚您想要完成什么,而且数据库优化器可能会以同样的方式进行翻译。