表格items
会跟踪可存储的不同类型的商品。
item_type item_name last_stock 1 cake 2010-08-10 2 fruit 2010-08-07 3 soda 2010-08-07 4 water 2010-08-09
表individual_items
会跟踪每个特定项目。
id item_type 1 1 2 2 3 1
我在MySQL中的查询:
SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY j.item_type
然而,COUNT(j.id)
正在搞砸我的结果。它似乎是对任何已定义但实际上不存在的项目进行分组。
item_type item_name COUNT(j.id) 1 cake 2 2 fruit 1 3 soda 0
我认为预期的第四行4 water 0
没有显示,因为COUNT()
错误地将LEFT OUTER JOIN
产生的不存在的行分组。我该如何解决这个问题?
答案 0 :(得分:3)
除了聚合函数中的那些字段外,您应该按SELECT语句中的所有字段进行分组
SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY i.item_type, i.item_name
更新:我在我的本地mysql服务器上测试过,上面的代码应该可以运行
答案 1 :(得分:1)
你的GROUP BY
条款可能是罪魁祸首。您按照可能不包含项类型的表进行分组,因此在项类型3和4的情况下,j.item_type为NULL(而i.item_type将包含期望值)。如果您按照i上的item_type分组,问题应该自行解决。
答案 2 :(得分:0)
尝试使用RIGHT JOIN。
答案 3 :(得分:0)
尝试
SELECT i.item_type, i.item_name, COUNT(j.id)
FROM items i
LEFT OUTER JOIN individual_items j
ON i.item_type = j.item_type
GROUP BY i.item_type,i.item_name