如何显示未包含在另一个 table 中的所有产品。通过 STRING_AGG
How to show all products which not included in another table. by STRING_AGG
我目前正在参与一个关于产品和变体的项目。
产品Table
productID productName
-------------------------
1 Perfume X
2 Perfume Y
变体Table
variantID variantName productID
1 color 1
2 volume 1
变量值Table
variantValueID variantValue variantID
1 Red 1
2 Blue 1
3 Green 1
4 100ML 2
5 50ML 2
ProductVariant Table
productVariantID productID sku price
1 1 111 50.00
2 1 222 30.00
4 1 333 15.00
5 2 444 10.95
产品详情Table
ProductDetailID productVariantID variantValueID
1 1 1
2 1 4
3 2 1
4 2 5
5 4 2
6 4 5
relationship
当我调用这个查询时..
SELECT p.productName + ' ' + STRING_AGG(vv.variantValue,' ') product,pv.price
FROM
product p
JOIN ProductVariant pv ON pv.productID = p.productID
JOIN ProductDetail pd ON pv.productVariantID = pd.productVariantID
join VariantValue vv ON pd.variantValueID = vv.variantValueID
GROUP BY pd.productVariantID, p.productName,pv.price
我得到以下结果..
product price
Perfume X Red 100ML 50.00
Perfume X Red 50ML 30.00
Perfume X Blue 50ML 15.00
到目前为止一切顺利,它显示了所有产品的价格,但是当我插入没有变体的新产品(简单产品)时,它没有出现。在我的例子中,Perfume Y 没有任何变体。
我尝试使用右连接和完全连接但没有成功。我如何展示所有产品,包括那些没有变体的产品。
我想你只是想要一个 left join
:
SELECT p.productName + COALESCE(' ' + STRING_AGG(vv.variantValue,' '), '') as product,
pv.price
FROM product p LEFT JOIN
ProductVariant pv
ON pv.productID = p.productID LEFT JOIN
ProductDetail pd
ON pv.productVariantID = pd.productVariantID LEFT JOIN
VariantValue vv
ON pd.variantValueID = vv.variantValueID
GROUP BY p.productName, pv.price
我目前正在参与一个关于产品和变体的项目。
产品Table
productID productName
-------------------------
1 Perfume X
2 Perfume Y
变体Table
variantID variantName productID
1 color 1
2 volume 1
变量值Table
variantValueID variantValue variantID
1 Red 1
2 Blue 1
3 Green 1
4 100ML 2
5 50ML 2
ProductVariant Table
productVariantID productID sku price
1 1 111 50.00
2 1 222 30.00
4 1 333 15.00
5 2 444 10.95
产品详情Table
ProductDetailID productVariantID variantValueID
1 1 1
2 1 4
3 2 1
4 2 5
5 4 2
6 4 5
relationship
当我调用这个查询时..
SELECT p.productName + ' ' + STRING_AGG(vv.variantValue,' ') product,pv.price
FROM
product p
JOIN ProductVariant pv ON pv.productID = p.productID
JOIN ProductDetail pd ON pv.productVariantID = pd.productVariantID
join VariantValue vv ON pd.variantValueID = vv.variantValueID
GROUP BY pd.productVariantID, p.productName,pv.price
我得到以下结果..
product price
Perfume X Red 100ML 50.00
Perfume X Red 50ML 30.00
Perfume X Blue 50ML 15.00
到目前为止一切顺利,它显示了所有产品的价格,但是当我插入没有变体的新产品(简单产品)时,它没有出现。在我的例子中,Perfume Y 没有任何变体。
我尝试使用右连接和完全连接但没有成功。我如何展示所有产品,包括那些没有变体的产品。
我想你只是想要一个 left join
:
SELECT p.productName + COALESCE(' ' + STRING_AGG(vv.variantValue,' '), '') as product,
pv.price
FROM product p LEFT JOIN
ProductVariant pv
ON pv.productID = p.productID LEFT JOIN
ProductDetail pd
ON pv.productVariantID = pd.productVariantID LEFT JOIN
VariantValue vv
ON pd.variantValueID = vv.variantValueID
GROUP BY p.productName, pv.price