我是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
如果有人能引导我朝着正确的方向前进,我真的很感激。
感谢您的帮助。
答案 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
我的错误在于连接,现在我对它们有了更好的了解。