mysql - 左连接和计数在 MYSQL 中不能正常工作

标签 mysql sql join group-by left-join

我有两个表AB,在这里你可以看到AB

A    |  id   |   title
-------------------------
         1   |    A1
         2   |    A2
         3   |    A3   

B    |  A_id   |   title
-------------------------
         1     |    B1
         1     |    B2
         1     |    B3   

我想做的是计算 B 中 A_id 的数量,我尝试了以下查询:

select A.title as "title",count(title) as "count" from A left join B on A.id = B.A_id

这将给我以下结果:

title  |  count
---------------
  A1   |    3
  A2   |    1
  A3   |    1
  A4   |    1

我需要的是:

title  |  count
---------------
  A1   |    3
  A2   |    0
  A3   |    0
  A4   |    0

最佳答案

您的查询问题:

  1. 您的查询缺少 GROUP BY 子句。您似乎正在使用禁用选项 ONLY_FULL_GROUP_BY 的 MySQL 版本,因此,MySQL 不会向您抛出正确的错误,而是愉快地执行您的查询。

  2. count(title) 是不明确的,因为该列存在于两个表中。这应该会产生一个错误。您实际上想要依赖来自表 B 的列;我会使用 B.A_id,以防万一 B 中的某些记录的 title 为空。

考虑:

select A.title, count(B.A_id) as `count`
from A 
left join B on A.id = B.A_id
group by A.title

旁注:

  • 在 MySQL 中,我建议对标识符使用反引号而不是双引号;这就是 MySQL 的做法

  • A.title as title 是重复的:它等同于 A.title

关于mysql - 左连接和计数在 MYSQL 中不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084763/

相关文章:

php - MySQL 查询不工作 - 没有错误

mysql - mysql中如何获取下一个自增id

sql - Oracle 从 select 插入到具有更多列的表中

mysql - 缓慢的 MySQL IN 查询——如何转换为 JOIN?

Mysql获取产品数量

MySQL 正则表达式列表

php - 对于 PDO PHP,将值存储在 var 中安全吗?

php - Sugarcrm,在保存记录的同时编写自定义代码

sql - 优化 SELECT COUNT 为 EXISTS

postgresql - 大表上的 Postgres 慢查询