[英]Left Join not returning all rows in left table
我有一个电影数据库,其中一个表是“类别”,其中包含数据库中电影可能具有的所有流派。
运行以下查询:
SELECT category.name FROM category
返回行:
Action
Animation
Children
Classics
Comedy
Documentary
Drama
Family
Foreign
Games
Horror
Music
New
Sci-Fi
Sports
Travel
我正在尝试查询数据库以查找特定演员在其中扮演的每种特定类型的#,但是我希望它在下一列中返回所有带有#的类型。 这是我最初的查询:
SELECT q1.name AS 'Film Category', COUNT(q2.name) AS '# of Films Ed Chase has appeared in'
FROM (
SELECT category.name FROM category
) AS q1
LEFT JOIN (
SELECT category.name FROM category
INNER JOIN film_category ON film_category.category_id = category.category_id
INNER JOIN film ON film.film_id = film_category.film_id
INNER JOIN film_actor ON film.film_id = film_actor.film_id
INNER JOIN actor ON actor.actor_id = film_actor.actor_id
WHERE actor.first_name = 'ED' AND actor.last_name = 'CHASE'
) AS q2
ON q1.name = q2.name AND '# of Films Ed Chase has starred in' >= 0
GROUP BY q2.name
ORDER BY q2.name;
并且它返回了该表,但缺少一些行(我希望它提供所有类型,而不仅仅是演员扮演角色的类型):
Film Category # of Films Ed Chase has appeared in
Animation 0
Action 2
Classics 2
Documentary 6
Drama 3
Foreign 2
Music 1
New 2
Sci-Fi 1
Sports 2
Travel 1
有趣的是,它为“动画”返回了“ 0”,但没有为“儿童”或“喜剧”返回任何行,这就是我要查找的结果(返回了所有流派)。 我究竟做错了什么?
COUNT()
不计算NULL,并且您的左联接将NULL记录在右侧表中没有值的记录中。 您的外部联接实际上是(或者应该是-对此进行检查)返回所有所需的行,但是具有聚合功能的外部select正在吃掉它们。
尝试将count()
移到右侧子查询中,然后在外部查询IFNULL(q2.count, '0')
其替换为IFNULL(q2.count, '0')
以将NULL替换为零。
我会注意到您应该在q1.name而不是q2.name上分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.