sql - 使用左连接和分组时显示第二个子表值
问题描述
我有三个表类别、产品和 Sku,它们有父子关系。
我想要第一个产品记录,其中产品 id 的所有 sku 必须与 sku 表匹配,并且当类别 id 的所有产品必须在产品表中匹配时,类别相同。
现在这里的问题我想在这里显示 sku id 以及类别 id。有可能做到吗??
这是查询:
SELECT cat.category_id FROM Category cat
LEFT JOIN(
SELECT product.product_id
FROM Product product
LEFT JOIN Sku sku ON product.sku_id = sku.sku_details_id
GROUP BY product.product_id
HAVING COUNT(product.product_id) = COUNT(sku.sku_details_id)
) childProduct ON cat.product_id = childProduct.product_id
GROUP BY cat.category_id
HAVING COUNT(cat.category_id) = COUNT(childProduct.product_id)
样本数据
Category
cat1 prd1 prd2
cat2 prd3
Product
prd1 sku1 sku2 sku3 sku4 : cat1
prd2 sku1 sku2 sku3 sku4 : cat1
prd3 sku1 sku4 : cat2
Sku
sku1
sku2
sku3
sku4
结果应该是
cat1,sku1,sku2,sku3,sku4
解决方案
尝试这个。
表架构:
CREATE TABLE Category (category_id VARCHAR(10),Product_Id VARCHAR(10));
INSERT INTO Category VALUES('cat1','prd1');
INSERT INTO Category VALUES('cat1','prd2');
INSERT INTO Category VALUES('cat2','prd3');
CREATE TABLE Product (Product_Id VARCHAR(10),sku_id VARCHAR(10));
INSERT INTO Product VALUES('prd1','sku1');
INSERT INTO Product VALUES('prd1','sku2');
INSERT INTO Product VALUES('prd1','sku3');
INSERT INTO Product VALUES('prd1','sku4');
INSERT INTO Product VALUES('prd2','sku1');
INSERT INTO Product VALUES('prd2','sku2');
INSERT INTO Product VALUES('prd2','sku3');
INSERT INTO Product VALUES('prd2','sku4');
INSERT INTO Product VALUES('prd3','sku1');
INSERT INTO Product VALUES('prd3','sku4');
CREATE TABLE Sku (sku_details_id VARCHAR(10));
INSERT INTO Sku VALUES('sku1');
INSERT INTO Sku VALUES('sku2');
INSERT INTO Sku VALUES('sku3');
INSERT INTO Sku VALUES('sku4');
SQL查询:
SELECT cat.category_id,P.sku_id
FROM Category cat
INNER JOIN(
SELECT product.product_id
FROM Product product
INNER JOIN Sku sku ON product.sku_id = sku.sku_details_id
GROUP BY product.product_id
HAVING COUNT(DISTINCT product.sku_id) = (SELECT COUNT(DISTINCT sku_details_id) FROM Sku)
) childProduct ON cat.product_id = childProduct.product_id
JOIN Product P ON P.product_id = cat.product_id
GROUP BY cat.category_id,P.sku_id
输出:
| CATEGORY_ID | SKU_ID |
|-------------|--------|
| cat1 | sku1 |
| cat1 | sku4 |
| cat1 | sku3 |
| cat1 | sku2 |
推荐阅读
- ios - 有没有办法清除 iOS 上个人热点的 DHCP 租约?
- mongodb - mongodb - 副本集创建错误:仲裁检查失败,因为没有足够的投票节点响应
- c++ - 等待串口数据并合并结果
- python - 是否有任何优雅的方法来定义具有 dtype 数组列的数据框?
- python - 如何在 Python 中跟踪图像中的曲线?
- vuejs2 - 如何在RouteUpdate导航守卫之前测试vue路由器?
- php - Laravel:会话变量或多次设置变量?
- c - 附加函数中的 C 指针未更新头尾的值
- android - 提取pdf文件文本并在应用程序上显示
- c - 如何使用字符串声明作为实际成员的表示来调用结构的成员?