如何用SQLite查询所有参演人员均在世的电影名称?
解决方案
可以通过关联三张表,统计每部电影中去世演员的数量,筛选出数量为0的电影来实现需求。以下是包含INNER JOIN、CASE WHEN和SUM的SQL查询:
SELECT m.uniqueMovieId, m.movieName FROM movies m INNER JOIN cast c ON m.uniqueMovieId = c.uniqueMovieId INNER JOIN personnel p ON c.castId = p.castId GROUP BY m.uniqueMovieId, m.movieName HAVING SUM(CASE WHEN p.yearOfDeath IS NOT NULL THEN 1 ELSE 0 END) = 0;
代码解释:
- 表关联:用
INNER JOIN依次关联movies、cast和personnel,确保只保留存在参演人员记录的电影。 - 标记与统计:通过
CASE WHEN将已去世(yearOfDeath不为空)的演员标记为1,未去世的标记为0,再用SUM汇总每部电影中去世演员的总数。 - 结果过滤:
HAVING子句筛选出去世演员总数为0的电影,即所有参演人员均未去世的目标电影。
补充场景处理:
如果需要包含无参演人员记录的电影(这类电影自然没有去世演员),可以将INNER JOIN替换为LEFT JOIN,同时保持过滤条件不变:
SELECT m.uniqueMovieId, m.movieName FROM movies m LEFT JOIN cast c ON m.uniqueMovieId = c.uniqueMovieId LEFT JOIN personnel p ON c.castId = p.castId GROUP BY m.uniqueMovieId, m.movieName HAVING SUM(CASE WHEN p.yearOfDeath IS NOT NULL THEN 1 ELSE 0 END) = 0;
内容的提问来源于stack exchange,提问作者Lone Wolf
相关产品推荐
相关产品推荐

