我正在阅读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
我该如何处理子查询?
答案 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)