我正在嘗試使用 MySQL 8 創建一個 SELECT 查詢,該查詢根據其他 5 個查詢的結果“創建”5 個新欄位,但是,我正在努力弄清楚如何使其作業。
考慮這個場景:
產品屬性
| 產品編號 | 屬性名稱 | 屬性值 |
|---|---|---|
| 1 | 直徑 | 1mm |
| 1 | 寬度 | 2mm |
| 1 | 重量 | 1公斤 |
| 1 | 長度 | 10mm |
| 2 | 直徑 | 12mm |
| 2 | 寬度 | 22mm |
| 2 | 重量 | 2公斤 |
| 2 | 長度 | 20mm |
現在考慮我的“用戶輸入”希望第一個屬性為“寬度”,第二個屬性為“重量”,即 att1 = Width, att2=Weight, att3 ..... 等
我希望構建一個回傳以下內容的 SELECT 查詢:
| 產品編號 | 阿特1 | att2 |
|---|---|---|
| 1 | 2mm | 1公斤 |
| 2 | 22mm | 2公斤 |
我可以讓它與屬性 1 一起使用,但我正在努力弄清楚如何使其適用于屬性 2。
這是我的查詢:
select `att1`,ATT_TABLE.productid FROM
(select `attribute_value` as att1, `productid` from `product_attributes` where attribute_name='Width') ATT_TABLE
JOIN products on ATT_TABLE.productid = products.productid
WHERE products.catid='12345'
忽略 JOIN/WHERE - 這只是我需要獲取特定類別產品的一些額外邏輯,但我已將其包含在內,以防它會破壞收到的任何答案。
如何修改查詢以包含另一個子查詢 SELECT 陳述句以獲取我的第二個屬性,或者是否有另一種方法可以實作相同的功能?
有點像這樣:
select `att1`,`att2`,ATT_TABLE.productid FROM
(select `attribute_value` as att1, `productid` from `product_attributes` where attribute_name='Width') ATT_TABLE
(select `attribute_value` as att2, `productid` from `product_attributes` where attribute_name='Weight') ATT_TABLE2
編輯:slashroot 的另一個建議是使用 CASE / GROUP BY。
select productid,
CASE
WHEN attribute_name ='Width' THEN attribute_value
END as att1,
CASE
WHEN attribute_name ='Weight' THEN attribute_value
END as att2
FROM product_attributes
WHERE productid='1'
)
但是,這會為相同的 productID 回傳多行,我正在努力找出 GROUP BY 陳述句。這是該陳述句的回傳:
| 產品編號 | 阿特1 | att2 |
|---|---|---|
| 1 | 空值 | 空值 |
| 1 | 空值 | 空值 |
| 1 | 2mm | 空值 |
| 1 | 空值 | 2公斤 |
我如何讓一群人把它濃縮下來?
uj5u.com熱心網友回復:
這是您在上面的 EDIT 中所做的一個好的開始。但是你錯過了幾個步驟。
看看這個查詢,它應該回傳所需的結果
SELECT productid,
MAX(CASE WHEN attribute_name = 'Width' THEN attribute_value ELSE NULL END) as att1,
MAX(CASE WHEN attribute_name = 'Weight' THEN attribute_value ELSE NULL END) as att2
FROM product_attributes
GROUP BY productid
檢查這個DB FIDDLE的結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351137.html
標籤:mysql
下一篇:第1062回
