【问题标题】:Subquery with multiple conditions referencing different tables?具有引用不同表的多个条件的子查询?
【发布时间】:2018-11-29 18:17:38
【问题描述】:

我正在阅读 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 同理,但增加了一个条件:电影不仅要由哈里森福特主演,而且他也不能是男主角。演员的名字存储在“演员”表中,主角/非主角信息在“演员表”中

所以对于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

我将如何处理子查询?

【问题讨论】:

    标签: sql join subquery


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 嗯,这很简单...谢谢!
    • 很高兴能帮上忙!
    猜你喜欢
    • 2016-10-12
    • 2020-09-21
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多