具有多个条件的子查询引用不同的表?

时间:2018-11-29 18:17:39

标签: sql join subquery

我正在阅读sqlzoo.net的教程,并试图将自己的头缠在子查询和JOIN上。在执行此操作时,我尝试使用JOIN编写一次相同的代码,并使用子查询编写一次。现在,我想知道在存在多个条件时是否可以使用子查询。

目前,我正在研究问题8和9 of this problem set;在我链接的站点顶部,您可以看到正在使用的表。我设法获得#8(“列出'哈里森·福特'出现过的电影”)的权利。

使用JOIN

SELECT m.title
FROM movie m
JOIN casting c ON c.movieid = m.id
JOIN actor a ON a.id = c.actorid
WHERE a.name = 'Harrison Ford'

带有子查询:

SELECT title 
FROM movie
WHERE id IN (SELECT movieid FROM casting 
WHERE actorid IN (SELECT id FROM actor WHERE name = 'Harrison Ford'))

问题9相同,但又增加了另一个条件:电影不仅要扮演哈里森·福特的主角,而且他也不能担任主角。演员姓名存储在“演员”表中,潜在顾客/非潜在顾客信息存储在“ casting”表中

因此,使用JOIN我只需通过AND添加另一个条件:

SELECT title
FROM movie m
JOIN casting c ON c.movieid = m.id 
JOIN actor a ON a.id = c.actorid 
WHERE a.name = 'Harrison Ford' and c.ord != 1

我该如何处理子查询?

1 个答案:

答案 0 :(得分:3)

只需将其添加到子查询中:

SELECT title 
FROM movie
WHERE id IN (SELECT movieid FROM casting c
WHERE actorid IN (SELECT id FROM actor WHERE name = 'Harrison Ford') And c.ord != 1)