2012-02-15 45 views
1

經過了很多時間的努力,我終於投降並請求你們的幫助。這就是我的MySQL表的樣子:如何在兩個表中選擇?

表1:

 
Parent_ID | ID | Name | Quality |Price 
1   | 001|Apple | good |1.50 
1   | 002|Apple | medium |1.20 
1   | 003|Apple | poor |0.99 
2   | 004|Car | good |5000.00 
2   | 005|Car | poor |200.00 

表2:

 
Parent_ID | Var_Name | Value 
1   | color | red 
1   | size  | big 
1   | rating | 3 Star 
2   | color | blue 
2   | size  | medium 
2   | rating | ok 

Ok.So遠越好。我現在需要的是一個查詢,使我這個:

 
Parent_ID | ID | Name | Quality | Price | color | size | rating 
1   | 001 | Apple | good | 1.50 | red | big | 3Star 
1   | 002 | Apple | medium | 1.20 | red | big | 3Star 
1   | 003 | Apple | poor | 0.99 | red | big | 3Star 
2   | 004 | Car | good | 5000.00 | blue | medium | ok 
2   | 005 | Car | poor | 200.00 | blue | medium | ok 
+1

根據您的預期數據,我假設'Table1'中的'ID'列不被用作關鍵字? – JYelton 2012-02-15 23:16:19

+0

SELECT table1.parentID, 如果(table2.varname = '顏色',table2.value,NULL)作爲 '顏色' FROM 表1,表2 WHERE table1.ID = table2.ID – user1212368 2012-02-15 23:21:37

+0

連接兩個表,其中兩者都具有一個'parent_id'列讓我噁心。 – JYelton 2012-02-15 23:32:43

回答

-1

所有你需要的是一個簡單的加入。我相信

SELECT * 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.Parent_Id = t2.Parent_Id 
1
Select T1.Parent_ID, T1.ID, T1.Name, T1.Quality, T1.Price, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'color') as color, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'size') as size, 
    (select value from Table2 T2 where T2.Parent_ID = T1.Parent_ID and Var_Name = 'rating') as rating 
FROM Table1 T1 
+1

看起來很有效,但這是一種垃圾解決方案 - 即使表格尺寸適中,這種方式也會表現得非常差 - 您每3行查詢3次!請參閱康拉德的答案如何完成。 – Bohemian 2012-02-16 00:06:10

5

剛剛加入到表2濾波VAR_NAME三次在JOIN子句中。

SELECT t.parent_id, 
     t.id, 
     t.name, 
     t.quality, 
     t.price, 
     c.VALUE AS color, 
     s.VALUE AS size, 
     r.VALUE AS rating 
FROM table1 t 
     LEFT JOIN table2 c 
     ON t.parent_id = c.parent_id 
      AND c.var_name = 'color' 
     LEFT JOIN table2 s 
     ON t.parent_id = s.parent_id 
      AND s.var_name = 'size' 
     LEFT JOIN table2 r 
     ON t.parent_id = r.parent_id 
      AND r.var_name = 'rating' 
+0

這就是它!謝謝 - 你讓我的一天(至少我的早晨:-) – user1212368 2012-02-16 07:49:39

+0

很高興我能幫到你 – 2012-02-16 13:20:34

0

還有一種方法可以做到這一點。它只使用一個連接,但你必須使用聚合函數。

SELECT table1.*, 
max(if(table2.var_name='color',table2.value, NULL)) as color, 
max(if(table2.var_name='size',table2.value, NULL)) as size, 
max(if(table2.var_name='rating',table2.value, NULL)) as rating, 
FROM table1 join table2 
WHERE table1.ID = table2.ID 
GROUP BY table.*