產品
| prod_id | 產品名稱 |
|---|---|
| 10 | 橙子 |
| 11 | 蘋果 |
| 12 | 蘿卜 |
| 13 | 生菜 |
類別
| cat_id | 貓名 |
|---|---|
| 20 | 水果 |
| 21 | 蔬菜 |
物品
| item_id | 財產種類 | 適當的價值 |
|---|---|---|
| 30 | fk_prod_id | 10 |
| 30 | fk_cat_id | 20 |
| 31 | fk_prod_id | 11 |
| 31 | fk_cat_id | 20 |
| 32 | fk_prod_id | 12 |
| 32 | fk_cat_id | 21 |
我正在嘗試旋轉 Item 然后左加入 Product 和 Category 以獲得:
| item_id | fk_prod_id | fk_cat_id | 產品名稱 | 貓名 |
|---|---|---|---|---|
| 30 | 10 | 20 | 橙子 | 水果 |
| 31 | 11 | 20 | 蘋果 | 水果 |
| 32 | 12 | 21 | 蘿卜 | 蔬菜 |
很遺憾:
SELECT
item_id,
MAX(CASE WHEN property_type = 'fk_prod_id' THEN property_value END) AS fk_prod_id,
MAX(CASE WHEN property_type = 'fk_cat_id' THEN property_value END) AS fk_cat_id
FROM item AS i
LEFT JOIN product AS p ON p.prod_id = fk_prod_id
LEFT JOIN category AS c ON c.cat_id = fk_cat_id
GROUP BY item_id;
#Error Code: 1054. Unknown column 'fk_prod_id' in 'on clause'
在上述場景的資料透視表之后,我如何離開加入其他表?
uj5u.com熱心網友回復:
如果(item_id, property_type)定義為 UNIQUE(這是合理的),則加入 2 個 Item 表副本更簡單,甚至可能更快:
SELECT item_id,
i1.property_value fk_prod_id,
i2.property_value fk_cat_id,
p.prod_name,
c.cat_name
FROM Item i1
JOIN Item i2 USING (item_id)
JOIN Product p ON p.prod_id = i1.property_value
JOIN Category c ON c.cat_id = i2.property_value
WHERE i1.property_type = 'fk_prod_id'
AND i2.property_type = 'fk_cat_id'
uj5u.com熱心網友回復:
SELECT
item_id,
fk_prod_id,
fk_cat_id,
prod_name,
cat_name
FROM (
SELECT
item_id,
MAX(CASE WHEN property_type = 'fk_prod_id' THEN property_value END) AS fk_prod_id,
MAX(CASE WHEN property_type = 'fk_cat_id' THEN property_value END) AS fk_cat_id
FROM item AS i
GROUP BY item_id
) AS t1
LEFT JOIN product AS p ON p.prod_id = t1.fk_prod_id
LEFT JOIN category AS c ON c.cat_id = t1.fk_cat_id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522263.html
上一篇:將URL卷曲到vb.net
