2013-04-25 103 views
0

我有三個表:MySQL:如何使用分配表在一個查詢中連接三個表?

ITEMS 
itemid | itemname 
1  | Item 1 

FEATURES 
featureid | featurename 
1   | feature1 
2   | feature2 
3   | feature3 
4   | feature4 
...  | ... 

ASSIGN 
assignid | itemid | featureid 
1  | 1  | 1 
1  | 1  | 2 
1  | 1  | 3 
1  | 1  | 4 

我想要一個查詢,這將使我類似這樣的結果:

ITEMS 
itemid | itemname | featurename1 | featurename2 | etc 
1  | Item 1 | feature1  | feature2  | etc 

有沒有辦法做到這一點,而無需第二個查詢?我發誓我只是以錯誤的方式思考它?有任何想法嗎?

注意:功能可以是0到50種不同功能的任何功能。我的數據庫設計可能是錯誤的?

+0

[見這也許有用(http://stackoverflow.com/questions/5196371/sql-query-concatenating-results-into-one-string) – mojtaba 2013-04-25 18:52:16

+0

如果項目只有例如。 featureid 3和4分配給它(但不是1或2),那麼你希望它的特性出現在'featurename3'和'featurename4'(匹配featureid)列中,或者在'featurename1'和'featurename2'列中出現。從左到右填充列)? – 2013-04-25 19:00:35

+1

爲什麼所有'assignid'值'1'?這是一個錯字嗎? – 2013-04-25 19:01:54

回答

2

鏈接他們使用ASSIGN表,然後你可以使用GROUP_CONCAT()做你想要什麼。試試這個:

SELECT 
    ITEMS.itemid, 
    ITEMS.itemname, 
    FEATURES.featureid, 
    GROUP_CONCAT(FEATURES.featurename) AS FEATURES 
FROM ITEMS 
JOIN ASSIGN ON ITEMS.itemid = ASSIGN.itemid 
JOIN FEATURES ON FEATURES.featureid = ASSIGN.featureid 

SQL Fiddle link

0

只需使用ASSIGN表作爲ITEMS和FEATURES的交叉參考。因此,通過在ASSIGN表的外鍵,像這樣一起加入了一切:

SELECT 
    ITEMS.itemid 
, ITEMS.itemname 
, FEATURES.featureid 
, FEATURES.featurename 
, ASSIGN.assignid 
FROM `ITEMS` 
JOIN `ASSIGN` 
    ON ITEMS.itemsid = ASSIGN.itemid 
JOIN `FEATURES` 
    ON FEATURES.featureid = ASSIGN.featureid