Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL(PostgreSQL):如何编写查询以从同一个表中获取具有相同姓氏的姓名列表_Sql_Postgresql - Fatal编程技术网

SQL(PostgreSQL):如何编写查询以从同一个表中获取具有相同姓氏的姓名列表

SQL(PostgreSQL):如何编写查询以从同一个表中获取具有相同姓氏的姓名列表,sql,postgresql,Sql,Postgresql,我有一张演员名单。现在我想要的是一份同名演员的名单。如果一个演员有一个独特的姓氏,他不会出现在结果集中 为此,我尝试: SELECT a1.first_name, a1.last_name FROM actor a1, actor a2 WHERE a1.last_name = a2.last_name AND a1.actor_id != a2.actor_id ORDER BY a1.last_name; 现在它工作正常,除了我得到多个重复条目。就像附在这里的照片一样 结果为重复条

我有一张演员名单。现在我想要的是一份同名演员的名单。如果一个演员有一个独特的姓氏,他不会出现在结果集中

为此,我尝试:

SELECT a1.first_name, a1.last_name 
FROM actor a1, actor a2 
WHERE a1.last_name = a2.last_name AND a1.actor_id !=  a2.actor_id
ORDER BY a1.last_name; 
现在它工作正常,除了我得到多个重复条目。就像附在这里的照片一样

结果为重复条目

当然,很明显,每当一个条目与另一个条目的姓氏匹配时,演员的名字就会出现在列表上。如果它与另外两个人匹配,它会打印两次。但理想的方法是只打印一次,即使有许多其他匹配项,如图中所示

预期结果:


要删除重复项,只需添加GROUP BY子句:


不要使用联接,而是使用与EXISTS关联的子查询:

select a1.*
from actor a1
where exists (select *
              from actor a2
              where a2.last_name = a1.last_name
                and a2.actor_id <> a1.actor_id);

我认为可以使用SELECT语句中使用的DISTINCT子句从结果集中删除重复的行

请参阅本文:

因此,您的查询如下所示:

选择不同的a1.first\u name、a1.last\u name 来自演员a1,演员a2 其中a1.last_name=a2.last_name和a1.actor_id!=a2.演员身份证 按a1.姓氏订购;

将样本数据显示为屏幕截图并不是一个好方法,因为它几乎不可能使用样本数据来测试查询—不可能进行复制和粘贴。对于将来的问题,请添加为please@a_horse_with_no_name,我记下了。下一次我发布问题时也会这样做。顺便说一句,谢谢你帮助我您的解决方案经过了明显的修改。谢谢您的帮助。您的解决方案有效!:
select a1.*
from actor a1
where exists (select *
              from actor a2
              where a2.last_name = a1.last_name
                and a2.actor_id <> a1.actor_id);