我有 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 B
和 number 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 个不同的查询解决它。
伙计们,你能不能在这里用一个查询不使用子查询来解决这个问题。 提前致谢。
最佳答案
您可以使用子查询来获取表 B
、C
的聚合版本:
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/