mysql - 获取与 2 个不同表的一对多关系的计数

标签 mysql sql

我有 3 个表: 1:A

id   name
1    jhon

2:B

id a_id name
1    1   b1
2    1   b2
3    1   b3

3:C

id a_id name
1    1   c1

这里A有很多B和很多C

现在我需要计算与 A 关联的 number of Bnumber of C。 我知道这里有 2 个不同的查询可以帮助我检索属于 A 的 B、C 的计数 例如:-

 select count(id) from B where a_id=1;
  select count(id) from C where a_id=1;

我正在尝试使用连接查询来解决它,例如->

select count(b.id) , count(c.id) from A  a
left join B b on b.a_id = a.id
left join C c on c.a_id = a.id
where a.id = 1;

但它给出了错误的结果

count(b.id) count(c.id)
3            3

这是因为 a 有 3 B 这就是为什么我得到错误的 C 计数结果 我可以用子查询解决它,但我不想用子查询或 2 个不同的查询解决它。

伙计们,你能不能在这里用一个查询不使用子查询来解决这个问题。 提前致谢。

最佳答案

您可以使用子查询来获取表 BC 的聚合版本:

SELECT A.*, B.cnt_b, C.cnt_c
FROM A
LEFT JOIN (
   SELECT a_id, COUNT(*) AS cnt_b
   FROM B
   GROUP BY a_id
) AS B ON A.a_id = B.a_id
LEFT JOIN (
   SELECT a_id, COUNT(*) AS cnt_c
   FROM C
   GROUP BY a_id 
) AS C ON A.a_id = C.a_id
WHERE A.a_id = 1

关于mysql - 获取与 2 个不同表的一对多关系的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43511853/

相关文章:

php - highcharts 从数据库表中提取数据

mysql - sql中没有数据的地方如何显示零

java - 用sql查找圆内的点

mysql - 识别表中的匹配记录

php - 无法将太大的sql文件导入mysql

mysql - Windows ODBC 驱动程序 - 检索到的表情符号数据呈现为?

mysql - 提取具有两个值的记录

sql - 如何在 Oracle 数据库中使用 SQL 查询根据年龄组获取人数?

php - XML SOAP 保存到 mySQL 数据库

Java 10 中的 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 错误