gpt4 book ai didi

mysql - 如何使用 WHERE 子句显示 Null 结果

转载 作者:行者123 更新时间:2023-11-29 11:24:26 26 4
gpt4 key购买 nike

大家好,我是 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;

根据您的评论,为什么使用 ANDWHERE 是关于执行时如何评估 WHERE 的。 WHERE 子句根据您指定的条件限制整个结果集。而 ON 条件仅限制允许匹配记录的内容,而不必限制使用 OUTER JOIN 时的整个结果集。因此,如果您在其中添加一个 WHERE 条件,根据 LEFT JOINRIGHT 侧限制结果,则它会变成 INNER JOIN 因为它告诉 SQL 您只需要匹配的结果,并且因为只有某些类别 与该actor 匹配,您只会获得这些类别。但是,通过将条件放入 JOINON 子句中,您的结果将不受限制,并且将返回所有类别,但只会考虑符合您条件的 Actor 。

关于mysql - 如何使用 WHERE 子句显示 Null 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com