2014-10-30 24 views
0

我是SQL查询的新手,我正在处理一个查询以打印演员出现的电影COUNT,如果他们没有出现在任何电影中,总共包括0SQL查询不会在UNION上打印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 

我真的很感激,如果有人可以指导我在正确的方向。

谢谢你的帮助。

+0

你能给一个sqlfiddle吗? – 2014-10-30 16:38:39

+0

@Leandro是那个sqlfiddle?还是新的,所以不知道这是否是你要求的。 – Maddy 2014-10-30 16:40:16

+0

here:http://sqlfiddle.com/ 所以你/我们可以尝试一个解决方案 – 2014-10-30 16:41:03

回答

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中的所有行。

外连接是一个连接,其显示从内 加入不相同的行数据,而且还从该不一定必须 匹配在连接在一起的所有表中的行添加数据。有三个 类型的外连接 - 左,右和满。

+0

^这看起来像我应该工作。玛尼,我不确定为什么你有第二部分的查询?试试吧,让我们知道它是否有效? – Eilidh 2014-10-30 16:54:28

+0

@Mani你是否删除了查询的后半部分,包括'UNION'之后?没有必要。 你希望你的查询的后半部分能做什么? – Eilidh 2014-10-30 16:58:30

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 

我的错误是在加入,现在我有一个更好的了解他们。