有关在使用子查询时使用DISTINCT的问题

时间:2019-07-10 11:23:05

标签: sql subquery

所以问题出在:获取电影《异形》的演员表。

我的初始代码是:

(65536, 4, 4)
[[0 0 0 0]
 [0 1 0 0]
 [1 1 0 1]
 [0 0 1 0]]

出现错误是因为每个演员都被多次列出,我通过选择DISTINCT名称解决了这个问题,但是我有点不明白为什么会有多个演员列表吗?子查询仅提供演员表,该演员表在演员表中列出,且movieid与标题“ Alien”相对应。因此,此查询只有一个不同的actorid。

1 个答案:

答案 0 :(得分:0)

您将为每个演员获得多行,因为每个演员都在多部电影中(大概)。您正在按<演员>演员进行过滤,但是已经有多行了。

因此,您不需要外部join

select a.name
from actor a
where a.id in (select c.actorid
               from casting c join
                    movie m
                    on c.movieid = m.id 
               where m.title = 'alien'
              );

Voila!没有重复,也没有select distinct

更重要的是:

  • 限定所有列引用,尤其是在引用多个表的查询中。
  • 使用表别名,以便查询更易于编写和读取。