sql - 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 的原理吗?
提前致谢,
解决方案
你的代码没有意义。这就是问题所在。
这是它的解析方式:
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 查询,提供示例数据、所需结果以及您想要完成的任务的说明。