首页 > 解决方案 > 当查询限制来自另一个没有连接的表时,我可以从一个表中选择一个值吗?

问题描述

我的模型有 3 个表:ACTORSMOVIESMOVIE_CAST,代表 ACTORS 和 MOVIES 之间的关系。

表:演员

表:电影

表:MOVIE_CAST


我需要列出所有由“韦斯·安德森”导演的电影的演员和他们的出生年份。

我尝试了 2 个不同的查询:第一个我没有加入表格,第二个我做了。两者都给了我相同的结果,但我不确定哪个是正确的。

第一个查询:

SELECT DISTINCT A.NAME, A.BIRTH_YEAR
FROM ACTORS A, MOVIES M
WHERE M.DIRECTOR = 'Wes Anderson'

第二个查询:

SELECT DISTINCT A.NAME, A.BIRTH_YEAR
FROM ACTORS A
    JOIN MOVIE_CAST MC ON MC.ACTOR = A.NAME AND MC.BIRTH_YEAR = A.BIRTH_YEAR
    JOIN MOVIES M ON M.TITLE = MC.MOVIE AND M.RELEASE_YEAR = MC.MOVIE_RELEASE_YEAR
WHERE M.DIRECTOR = 'Wes Anderson'

哪个查询是正确的?

PS:顺便说一下,我正在使用 PostgreSQL/pgAdmin4 数据库。

标签: sqlpostgresqljoin

解决方案


第二个查询是“正确的”。

在第一个查询中,您已经形成了一个“笛卡尔积”(将演员表中的每一行乘以电影表中的行数),这就是为什么您需要使用SELECT DISTINCT来减少返回的行数。这是一种低效的方法。


推荐阅读