首页 > 解决方案 > 使用左连接和分组时显示第二个子表值

问题描述

我有三个表类别、产品和 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

标签: sqloracle

解决方案


尝试这个。

表架构:

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 |

推荐阅读