为何用AND同时筛选两位演员的SQL语句无法返回结果?
为什么用AND同时匹配两位演员的WHERE语句无法查出共同参演的电影?
问题核心在于对单条记录的逻辑判断误解:
- IMDB的演员-电影关联表(比如
movie_cast)里,每一条记录只对应一部电影和一个演员,不存在一条记录同时存储两个演员名字的情况。 - 你最初写的类似
WHERE actor_name = 'Johnny Depp' AND actor_name = 'Helena Bonham Carter'的语句,本质是要求同一条记录的actor_name字段同时等于两个完全不同的值,这在逻辑上不可能成立,所以查不到任何结果。
而子查询的写法是先找出Helena参演的所有电影,再从Johnny参演的电影里筛选出同时在这个列表里的作品,相当于找两个演员参演电影集合的交集,这才符合“共同参演”的逻辑。
另外,除了子查询,也可以用表自连接的方式实现相同效果:
SELECT DISTINCT mc1.movie_title FROM movie_cast mc1 JOIN movie_cast mc2 ON mc1.movie_title = mc2.movie_title WHERE mc1.actor_name = 'Johnny Depp' AND mc2.actor_name = 'Helena Bonham Carter';
内容的提问来源于stack exchange,提问作者user19161372
相关产品推荐
相关产品推荐

