Mysql select id from table1 and select count(id) from table2
Posted
技术标签:
【中文标题】Mysql select id from table1 and select count(id) from table2【英文标题】: 【发布时间】:2014-06-17 07:07:38 【问题描述】:我有两张桌子。我想从表 1 中选择 id 并从表 2 中计算相同的值
表 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,因为 Table2 中没有 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
【问题讨论】:
非常感谢朱奈德。突然在没有正确格式的情况下发布。 请查看更新后的表1。很抱歉。 【参考方案1】:group by 缺少的第一件事是,count 是一个聚合函数,需要对其进行分组,其次你需要在 on 子句中使用左连接和附加条件,即and a.qId =30
,所以它仍然会给你结果如果在右表中未找到左 id,则使用 where 子句将过滤掉整个结果集,而如果在连接中使用附加条件,则只会过滤右表中的记录
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
【讨论】:
但是表1的元素比较多(更新),所以都在列出来 朱奈德脱帽致敬。你这么快。为我节省了很多时间。再次感谢。 :)以上是关于Mysql select id from table1 and select count(id) from table2的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name