如何在 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 从一个表中获取所有记录并从另一个表中获取可用记录