我的架构旨在处理产品尺寸,因此产品属于某个商品,而具有特定尺寸的商品就是产品。
我需要选择所有类别并计算其中的活动产品(Products.IsHidden = false)。
这是我的架构;
CREATE TABLE CATEGORIES (
CategoryId int NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name varchar(255)
);
CREATE TABLE ITEMS (
ItemId int NOT NULL PRIMARY KEY AUTO_INCREMENT,
CategoryId int NOT NULL,
Name varchar(255),
Description varchar(255),
FOREIGN KEY (CategoryId) REFERENCES CATEGORIES(CategoryId)
);
CREATE TABLE SIZES (
SizeId int NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name varchar(255)
);
CREATE TABLE PRODUCTS (
ProductId int NOT NULL PRIMARY KEY AUTO_INCREMENT,
ItemId int NOT NULL,
SizeId int NOT NULL,
Price float,
Weight float,
Stock int NOT NULL,
Discount float NULL,
CreatedAt DateTime,
PictureLoc varchar(255),
IsHidden boolean,
FOREIGN KEY (SizeId) REFERENCES SIZES(SizeId),
FOREIGN KEY (ItemId) REFERENCES ITEMS(ItemId)
);
这是我的代码(我的目标是计算一个类别中的所有活动产品); 假设我在A类中有2个有效产品(IsHidden = false)。
SELECT
CATEGORIES.CategoryId,
CATEGORIES.Name,
Count(PRODUCTS.ProductId) as ActiveProducts
FROM CATEGORIES
LEFT JOIN ITEMS
ON CATEGORIES.CategoryId = ITEMS.CategoryId
LEFT JOIN PRODUCTS
ON ITEMS.ItemId = PRODUCTS.ItemId
WHERE PRODUCTS.IsHidden = FALSE
GROUP BY CATEGORIES.CategoryId
但此代码只返回1行。
CategoryId | Category Name | ActiveProducts
1 | A | 2
结果中是否应显示产品数为0的其他类别? 我的预期结果是:
CategoryId | Category Name | ActiveProducts
1 | A | 2
2 | B | 0
3 | C | 0
我如何提出我的预期结果?
答案 0 :(得分:0)
on
中第二个表的条件属于where
子句,而不属于SELECT c.CategoryId, c.Name, Count(p.ProductId) as ActiveProducts
FROM CATEGORIES c LEFT JOIN
ITEMS i
ON c.CategoryId = i.CategoryId LEFT JOIN
PRODUCTS p
ON i.ItemId = p.ItemId AND p.IsHidden = FALSE
GROUP BY c.CategoryId;
子句:
{{1}}