MySQL 计数不会与我的其余数据一起返回空计数。

标签 mysql count null

问题:对于数据库中存在的 location_id,但在 tbl_inventory 中没有分配给它们的任何项目,我无法让数据库返回 0/NULL。此外,还有分配了项目的 location_id 的计数。

tbl_inventory:(仅发布相关列)

location_id, shop_id, ...
1          | 100
1          | 100
3          | 106
4          | 100
10         | 102
2          | 100

tbl_location:(发布所有列)

location_id, location_desc, shop_id
1          | Shop Stock   | 100
2          | Crash Kit    | 100
3          | Site 4       | 106
4          | Radar Site   | 102
5          | New Location | 100
...
10         | Fire Stn 2   | 100

查询

SELECT
tbl_location.location_desc, 
tbl_inventory.location_id, 
COALESCE(COUNT(tbl_location.location_id), 0) as 'idCnt'
FROM tbl_location 
LEFT OUTER JOIN tbl_inventory
ON tbl_location.location_id = tbl_inventory.location_id
WHERE tbl_inventory.shop_id = 110
GROUP BY tbl_location.location_id;

结果

location_desc, location_id, idCnt
Shop Stock   | 1          | 2
Crash Kit    | 2          | 1
Fire stn 2   | 10         | 1

缺少这里是 tbl_location 中的 location_id 5

New Location | 5          | 0 (or Null, because there are none in tbl_inventory)

说明:

我的 tbl_location 是由我们网络中的各个商店分配(和创建)的容器标签表。然后,商店拥有该容器的所有权,并可以为其分配零件(tbl_inventory.location_id)以用于库存目的。

我的 PHP 应用程序使用此查询生成可用位置列表,并根据分配给它的项目数量授予选项。如果项目数量为 0,我希望能够删除该位置。

更糟

如果我删除 GROUP BY 整个查询就会变得困惑.. 仅返回 1 个 location_id/desc 并将该行的全部总数相加。

location_desc, location_id, idCnt
Shop Stock   | 1          | 5

我不确定这里实际发生了什么(在更糟糕的 block 中) - 但是我已经手动计数并且原始查询返回正确的计数我只是无法让它描绘 的位置事实上,它们存在于数据库中,但实际上没有分配给它们的任何项目。

有人有任何见解吗?我发现的所有修复都还没有起作用。

最佳答案

移动

WHERE tbl_inventory.shop_id = 110

连接条件的条件

 ON tbl_location.location_id = tbl_inventory.location_id
AND tbl_inventory.shop_id = 110

在您的 FROMLEFT JOIN 子句起作用后 - 那里有一行带有 0 的行,但是 WHERE > 将其过滤掉,因为该行中没有 tbl_inventory.shop_id = 110

PS:在选择中应该是tbl_location.location_id,而不是tbl_inventory.location_id

关于MySQL 计数不会与我的其余数据一起返回空计数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401054/

相关文章:

powershell - ArrayList 中的空元素导致 'Cannot bind argument to parameter' 错误

mysql - 使用 Slick 3.0 连接到 Mysql - No username, no password and bogus driver does not equal error

python - 使用count方法统计文本文件中的某个单词

scala - 查找 Array[Int] 的第一个空值

mysql - 将逗号分隔字段中的 mysql 计数值分组

bash - UNIX - 计算两个字段之间每行字符的出现次数并添加包含结果的新列

mysql - 在 MySQL 中将表中的所有负值更新为 NULL 的最有效方法

php - 用户可以使用直接链接访问 protected 页面。如何创建重定向?

MySQL - 选择值并按表名删除重复项

mysql - 将两个复杂的连接查询合并为一个