簡體   English   中英

左聯接不返回左表中的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM