mysql - 如何让空类别显示在此 SQL 选择中?

标签 mysql

这是我的选择,用于获取 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_categoryfilm_actor 中。
  • 如果影片有多个类别,则同一文件可能会被计算多次。

关于mysql - 如何让空类别显示在此 SQL 选择中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286736/

相关文章:

mysql - 子查询中的操作数应包含 1 列

mysql - 使用 MySQL 的 Visual Basic 聊天应用程序,如何在刷新时仅下载最后一条消息?

mysql - mysql中模式匹配和日期时间函数的混合

php - 自动创建 MySQL 表 [用户控制]

mysql - 如何插入具有另一个表中的值的文本

java - 如何从DB和JTable中删除选定的行?

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

javascript - 如何根据数据动态填充表

mysql - 如何从MySQL中的 View 中选择一个字段?

php - JQuery UI 自动完成与 Ajax PHP MYSQL 不显示结果