我有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个不同的Query可以帮助我检索属于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个不同的查询来解决它。
伙计们,您可以在这里通过一个查询来解决这个问题,而不使用子查询。 提前谢谢。
答案 0 :(得分:0)
您可以使用子查询来获取表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
答案 1 :(得分:0)
请尝试以下方法......
SELECT A.id as id,
countB,
countC
FROM A
LEFT JOIN ( SELECT a_id AS id,
COUNT( a_id ) as countB
FROM B
GROUP BY a_id
) B_ids ON A.id = B_ids.id
LEFT JOIN ( SELECT a_id AS id,
COUNT( a_id ) as countC
FROM C
GROUP BY a_id
) C_ids ON A.id = C_ids.id
GROUP BY id
ORDER BY id;
(以下说明......)
如果您有任何问题或意见,请随时发表评论。
答案 2 :(得分:0)
在Distinct
计数的帮助下,我已经实现了它。使用Distinct计数将删除重复的ID计数。
select count(Distinct b.id) , count(Distinct 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;