如何在SQL JOIN中保留NULL值,查询标题含JEDI的影片对应演员3信息
问题核心原因
现有代码存在两处逻辑错误:
- 左连接顺序颠倒,且在
WHERE子句中增加了actor_id=3的过滤条件,直接将没有3号演员参演的含JEDI标题的影片全部筛除 - 未输出需求要求的影片年份字段,还存在冗余的子查询和分组逻辑
修复后代码
SELECT f.title, f.release_year, fa.actor_id FROM film f LEFT JOIN film_actor fa ON f.film_id = fa.film_id AND fa.actor_id = 3 WHERE f.title LIKE '%JEDI%' ORDER BY f.title
具体修改点说明
- 调整连接主表为
film,先通过WHERE子句筛选出所有标题含JEDI的影片,确保所有符合标题要求的影片都能保留 - 将
actor_id=3的过滤条件从WHERE子句迁移到左连接的ON子句中,仅匹配3号演员的参演记录,未匹配到的影片actor_id字段会自动返回NULL,完全符合需求规则 - 补充了需求要求的
release_year(影片年份)字段输出,删除了原代码中无效的子查询和冗余的分组逻辑
内容的提问来源于stack exchange,提问作者Kevin de Lange
相关产品推荐
相关产品推荐

