SQL Query不会在UNION上打印0

时间:2014-10-30 16:35:46

标签: mysql oracle11g

我是SQL查询的新手,我正在编写一个查询来打印演员出现的COUNT部电影,如果他们没有出现在任何电影中,则总计0

我得到了所有预期的结果,除非演员没有出现在任何电影中,然后他们没有出现在列表中。

这是我到目前为止所拥有的 -

SELECT a.actor_name, count(*) 
FROM ACTOR a 
JOIN CAST_MEMBER c ON (a.actor_name = c.actor_name) 
GROUP BY a.actor_name 

UNION 

SELECT c2.actor_name, 0 
FROM ACTOR a2 JOIN CAST_MEMBER c2 ON (a2.actor_name = c2.actor_name) 
WHERE a2.actor_name NOT IN 
( 
    SELECT a3.actor_name 
    FROM ACTOR a3 
    JOIN CAST_MEMBER c3 ON (a3.actor_name = c3.actor_name)
)

EXPECTED OUTPUT 

ACTOR_NAME                       COUNT(*)
-------------------------------------------------- ----------
Amy Adams                           1
Brad Pitt                           4
Christian Bale                      1
Jennifer Anitson                    0
Jennifer Lawrence                   2
Leonardo DiCaprio                   2

OUTPUT I HAVE

ACTOR_NAME                       COUNT(*)
-------------------------------------------------- ----------
Amy Adams                           1
Brad Pitt                           4
Christian Bale                      1
Jennifer Lawrence                   2
Leonardo DiCaprio                   2

如果有人能引导我朝着正确的方向前进,我真的很感激。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

SELECT a.actor_name, count(*) 
FROM ACTOR a 
LEFT JOIN CAST_MEMBER c ON (a.actor_name = c.actor_name) 
GROUP BY a.actor_name;

您需要使用LEFT OUTER JOIN才能显示表ACTOR中的所有行。

  

外部联接是一种联接,它显示内部相同行的数据   join确实,但也添加了不一定拥有的行的数据   匹配所有连接在一起的表。有三种   外连接的类型 - 左,右和全。

答案 1 :(得分:0)

没有联盟的答案

ACTOR_NAME                       COUNT(*)
-------------------------------------------------- ----------
Amy Adams                           1
Brad Pitt                           4
Christian Bale                      1
Jennifer Aniston                    1
Jennifer Lawrence                   2
Leonardo DiCaprio                   2

与联盟的答复

ACTOR_NAME                       COUNT(*)
-------------------------------------------------- ----------
Amy Adams                           1
Brad Pitt                           4
Christian Bale                      1
Jennifer Aniston                    0
Jennifer Lawrence                   2
Leonardo DiCaprio                   2

我的错误在于连接,现在我对它们有了更好的了解。