我有一张演员名单表。现在我想拥有的是具有相同姓氏的演员名单。如果演员具有唯一的姓氏,他将不会出现在结果集中。
为此,我试过了:
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;
现在它工作正常,除了我得到多个重复的条目。就像在这里附上的图片一样。
重复条目的结果。
当然,很明显每次条目与另一个条目的last_name匹配时,都会在列表中打印一个actor的名字。如果它与其他两个人匹配,则会将其打印两次。但是,即使在有许多其他比赛中,也希望打印一次,如图所示。
期望的结果:
答案 0 :(得分:1)
请勿使用联接,而是使用与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);
答案 1 :(得分:0)
要删除重复项,只需添加GROUP BY
子句:
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
GROUP BY a1.first_name, a1.last_name
ORDER BY a1.last_name;
答案 2 :(得分:0)
我认为您可以使用SELECT语句中使用的DISTINCT子句从结果集中删除重复的行。
请参阅此文章:http://www.postgresqltutorial.com/postgresql-select-distinct/
所以你的查询看起来像这样:
SELECT DISTINCT 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;