我正在设置电子商务后端的请求。 我有3个表:product(ID为索引),category(ID为索引)和product_category,它们绑定了前2个表,因为一个产品可以属于多个类别,并且一个类别可以包含多个产品。
请求是获取所有类别的列表,其中包含类别名称和该类别中产品的数量,包括零值(当类别中不包含任何产品时)。显示结果的最后2列。
不幸的是,COUNT(字段名)给了我1而不是0。
这是我的SQL请求:
SELECT product_category.id_category AS pr_cat_cat_id,
id_product AS pr_cat_pr_id,
product.name AS productname,
categories.id,
categories.name,
COUNT ('pr_cat_cat_id') AS quantity
FROM product
LEFT JOIN product_category ON product_category.id_product = product.id
RIGHT JOIN (SELECT * FROM category) AS categories
ON categories.id = product_category.id_category
GROUP BY name
ORDER BY id ASC
并获得以下结果:
pr_cat_cat_id pr_cat_pr_id productname id name quantity
1 1 Product "Name1" 1 Category 1 2
2 3 Product "Name 3" 2 Category 2 2
NULL NULL NULL 3 Category 3 1
NULL NULL NULL 4 Category 4 1
NULL NULL NULL 5 Category 5 1
NULL NULL NULL 6 Category 6 1
我确实希望没有产品的类别的数量为零。
答案 0 :(得分:2)
您正在计算一个常量字符串值,该值永远不会为NULL
。正确使用引号。您在这里不需要它们:
COUNT(product_category.id_category) AS quantity
您不能为COUNT()
使用别名。您需要参考原始列。
请注意,您的查询格式不正确。 select
中唯一的东西应该是name
和聚合函数。
答案 1 :(得分:0)
无法引用同一选择列表中的列别名。而是使用其原始列名称:
COUNT(product_category.id_category)
注意:单引号用于字符串文字,并且它们绝不能为空。