首页 > 解决方案 > SQL 嵌套 WERE

问题描述

我是 SQL 的初学者,我不理解嵌套WHERE请求:

当我第一次请求时:

SELECT movies.title, people.name
FROM stars
INNER JOIN movies ON movies.id = stars.movie_id
INNER JOIN people ON people.id = stars.person_id
INNER JOIN ratings ON ratings.movie_id = stars.movie_id


WHERE people.name = 'Helena'

返回是正确的(海伦娜的所有电影)。

然后我尝试了一些无用的嵌套以了解嵌套的工作原理:

SELECT movies.title, people.name
FROM stars
INNER JOIN movies ON movies.id = stars.movie_id
INNER JOIN people ON people.id = stars.person_id
INNER JOIN ratings ON ratings.movie_id = stars.movie_id
WHERE  people.name = 'Helena' IN (

SELECT movies.title
FROM stars
WHERE people.name = 'Helena' )

还我0。

我的想法:

1 检索括号中的数据(检查电影中的“海伦娜”)

2 通过检查括号的结果来检索数据(结果1中的'Helena')

有人可以用这个请求向我解释嵌套 SQL 的原理吗?

提前致谢,

标签: sqlnested

解决方案


你的代码没有意义。这就是问题所在。

这是它的解析方式:

WHERE (people.name = 'Helena') IN (SELECT movies.title
                                   FROM stars
                                   WHERE people.name = 'Helena'
                                  )

第一部分是一个布尔表达式,计算结果为 0、1 或NULL。所以,如果它是真的,这看起来像:

WHERE 1 IN (SELECT movies.title
            FROM stars
            WHERE people.name = 'Helena'
           )

而“1”似乎不太可能作为电影名称。

子查询更没有意义。您正在从 中选择stars,但不要引用该表中的任何列。这只是从外部引用中创建了一个大的标题列表——如果该where子句不正确,则根本没有。

鉴于此查询没有意义,您可能想提出一个 NEW 查询,提供示例数据、所需结果以及您想要完成的任务的说明。


推荐阅读