我有两张桌子。我想从表1中选择id并从表2中计数相同的id
表1
Id qId opt
1 30 Chris Christie
2 30 Hillary Clinton
3 30 Allan West
4 30 Joe Biden
5 31 Mark
6 31 Ben Johnson
表2
poll_id qId ansId
201 30 1
202 30 2
204 31 8
我尝试的下面的查询只输出ansId 1和2,因为表2中没有3和4。
SELECT a.Id,
a.opt,
COUNT(b.ansId)
from Table1 a
INNER JOIN Table2 b ON a.Id = b.ansId
where a.qId =30
但我需要所有的ansId 1,2,3,4,计数为3和4的0,如下所示。
Id opt COUNT(b.ansId)
1 Chris Christie 1
2 Hillary Clinton 1
3 Allan West 0
4 Joe Biden 0
最佳答案
group by,count是一个聚合函数,需要对它进行分组,其次需要在on子句中使用附加条件left join,即and a.qId =30
,这样如果在right table中找不到left id,它仍然会给出结果,使用where子句将过滤掉整个resultset,而如果在join中使用附加条件,则只过滤右表中的记录
SELECT a.Id,
a.opt,
COUNT(b.ansId) from Table1 a
LEFT JOIN Table2 b ON a.Id = b.ansId and a.qId =30
GROUP BY a.Id
Fiddle Demo
更新示例数据集后编辑
SELECT a.Id,
a.opt,
COUNT(b.ansId) from Table1 a
LEFT JOIN Table2 b ON a.Id = b.ansId
WHERE a.qId =30
GROUP BY a.Id
Fiddle demo 2
关于mysql - MySQL从表1中选择ID并从表2中选择计数(ID),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23396951/