作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我是 SQL 新手,遇到了一些困难。我希望有人能为我清理一些东西。
这是我的问题。我想显示 Actor 所出演的所有类别以及他们在该类别中出演的电影数量。例如,他们在 Action 片中出演过 5 次。这是我到目前为止所拥有的:
SELECT c.name AS "Category_Name"
, Count(c.name) AS "Count"
FROM category c
JOIN film_category fc
ON c.category_id = fc.category_id
JOIN film f
ON fc.film_id = f.film_id
JOIN film_actor fa
ON f.film_id = fa.film_id
JOIN actor a
ON fa.actor_id = a.actor_id
WHERE a.first_name = "Kevin"
AND a.last_name = "Bloom"
GROUP
BY c.name
ORDER
BY c.name ASC;
这将显示所有类别以及“Kevin Bloom”在每个类别中玩过的次数,但不会显示他未玩过的类别的 NULL 值,而我需要它。我花了几个小时试图弄清楚这一点,但它要么没有帮助,要么我无法理解它。
据我所知,WHERE 子句导致了此问题。我还相信我可能需要使用 LEFT JOIN 来代替,并且可能需要使用子查询。当这两者结合使用时,我有点犹豫。如果有人能为初次学习者提供一些帮助,我将非常感激!
最佳答案
SELECT c.name AS "Category_Name", Count(a.actor_id) AS "Count"
FROM category c
LEFT JOIN film_category fc ON c.category_id = fc.category_id
LEFT JOIN film f ON fc.film_id = f.film_id
LEFT JOIN film_actor fa ON f.film_id = fa.film_id
LEFT JOIN actor a
ON fa.actor_id = a.actor_id
AND a.first_name = 'Kevin' AND a.last_name = 'Bloom'
GROUP BY c.name
ORDER BY c.name ASC;
根据您的评论,为什么使用 AND
与 WHERE
是关于执行时如何评估 WHERE
的。 WHERE
子句根据您指定的条件限制整个结果集。而 ON
条件仅限制允许匹配记录的内容,而不必限制使用 OUTER JOIN
时的整个结果集。因此,如果您在其中添加一个 WHERE
条件,根据 LEFT JOIN
的 RIGHT
侧限制结果,则它会变成 INNER JOIN
因为它告诉 SQL 您只需要匹配的结果,并且因为只有某些类别
与该actor
匹配,您只会获得这些类别。但是,通过将条件放入 JOIN
的 ON
子句中,您的结果将不受限制,并且将返回所有类别,但只会考虑符合您条件的 Actor 。
关于mysql - 如何使用 WHERE 子句显示 Null 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470042/
我是一名优秀的程序员,十分优秀!