这是我的选择,用于获取 Actor 凯文·布鲁姆主演的所有电影类别的列表,旁边是凯文主演的该类别电影的数量。
SELECT category.name, count(*) as kevinCount
FROM category
JOIN film_category ON film_category.category_id = category.category_id
JOIN film ON film.film_id = film_category.film_id
JOIN film_actor ON film_actor.film_id = film.film_id
JOIN actor ON actor.actor_id = film_actor.actor_id AND
actor.first_name="KEVIN" AND actor.last_name="BLOOM"
GROUP BY category.name;
我还希望此列表包括 Kevin 没有任何电影的所有类别。我曾尝试使用不同类型的连接语句但没有成功。谁能帮帮我?
最佳答案
left join
解决了保留所有类别的问题。您还需要计算正确的字段:
SELECT c.name, count(a.actor_id) as kevinCount
FROM category c LEFT JOIN
film_category fc
ON fc.category_id = c.category_id LEFT JOIN
film_actor fa
ON fa.film_id = fc.film_id LEFT JOIN
actor a
ON a.actor_id = fa.actor_id AND a.first_name = 'KEVIN' AND a.last_name = 'BLOOM'
GROUP BY c.name;
注意事项:
- 表别名使查询更易于编写和阅读。
- 您不需要加入表
film
。必要的列在film_category
和film_actor
中。 - 如果影片有多个类别,则同一文件可能会被计算多次。
关于mysql - 如何让空类别显示在此 SQL 选择中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286736/