我有两张桌子。我想从表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/

10-10 06:40