我有两张桌子。我想从表1中选择id并从table2中计算相同的
表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
答案 0 :(得分:0)
你的第一件事就是group by,count是一个聚合函数,需要进行分组,其次你需要在on子句and a.qId =30
中使用左连接和附加条件,所以它会stil给你如果在右表中找不到left id,则使用where子句将过滤掉整个结果集,而如果在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
编辑
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