如何在 MySQL 中显示一个表中的所有行并从另一个表中计数

Posted

技术标签:

【中文标题】如何在 MySQL 中显示一个表中的所有行并从另一个表中计数【英文标题】:How do I display all rows from a table and count from another table in MySQL 【发布时间】:2021-07-08 02:52:18 【问题描述】:

我有一个演员列表,目标是显示演员演过多少“X”电影的数量,我还必须显示所有演员的名字,无论他们是否曾出演过“X”电影或不是。

这是我的表格供参考:

演员 |援助 | A_FNAME | A_LNAME | A_YOB

角色 |援助 |中 | R_ROLE

电影 |中 | M_NAME | M_YOR

到目前为止,我所拥有的是:

SELECT ALL A_FNAME, A_LNAME, COUNT(R_ROLE) AS "X FILMS"
 FROM ACTOR                                                  
 LEFT OUTER JOIN ROLE                                        
 ON ACTOR.A_ID = ROLE.A_ID                                   
 WHERE R_ROLE LIKE '%(X)%'                          
 GROUP BY A_FNAME, A_LNAME; 

它只输出在 X 电影中扮演过的演员,但是我需要它来显示我插入的所有演员。我该怎么做?

【问题讨论】:

哪一栏是“X”片的信息? R_ROLE 列有“X”电影的信息 【参考方案1】:

带有子查询:

select  A_FNAME, A_LNAME,(select count(*) from role where role.a_id =a.a_id and  R_ROLE LIKE '%(X)%'  )from actor a

加入

SELECT ALL A_FNAME, A_LNAME,coalesce( COUNT(R_ROLE),0) AS "X FILMS"
 FROM ACTOR                                                  
 LEFT OUTER JOIN (select * from ROLE WHERE R_ROLE LIKE '%(X)%') r                          
 ON ACTOR.A_ID = r.A_ID                                   
 GROUP BY A_FNAME, A_LNAME; 

这里使用coalesce() 将空值替换为0。

【讨论】:

以上是关于如何在 MySQL 中显示一个表中的所有行并从另一个表中计数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:使用带有 WHERE 子句的 JOINS 从一个表中获取所有记录并从另一个表中获取可用记录

Mysql通过ID从另一个表中删除一个表

如何在一种方法中为数组赋值并从另一种方法调用

从表中选择数据并从另一个表中填充特定值

MS-ACCESS:删除除 top 1 之外的所有行并从查询中更新表

在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?