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的答案,或者
存在
,或者可能更多。我只喜欢中的
,因为它很好,很清楚您想要完成什么,而且数据库优化器可能会以同样的方式进行翻译。