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 选择在一个table不在另一个table的数据

MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name

mysql常用命令

MySQL复制表-SELECT INTO FROM

从mysql获取随机记录

mysql实现随机获取几条数据的方法