2011-12-12 122 views
0

你好旅行者堆棧溢出。我並不完全確定如何去問這個,而不是用圖片來更好地解釋我所得到的。如果有機會在別處問過這個問題,我找不到它,我表示歉意。MYSQL非規範化表查找

我有2個表tableA和tableB。 TableA包含一個標記爲id和displayName的列,其中有幾十個項目(爲了簡單起見,我們假設只有5個)。 ID列是唯一的,並且自動遞增,它也是搜索的主鍵。第二個表格(TableB)也包含該項目的id,但也包含4個對TableA's id的引用以及一些無關緊要的無關信息。所以會出現這樣的:

TableA 
------------------------- 
| id | displayName | 
------------------------- 
| 1  | itemA  | 
| 2  | itemB  | 
| 3  | itemC  | 
| 4  | itemD  | 
| 5  | itemE  | 
------------------------- 

TableB 
-------------------------------------------------------- 
| id | name | varA | varB | varC | varD | 
-------------------------------------------------------- 
| 1  | elm1 | 3 | 4 | 2 | 5 | 
| 2  | elm2 | 4 | 5 | 2 | 1 | 
| 3  | elm3 | 1 | 4 | 3 | 2 | 
| 4  | elm4 | 2 | 1 | 5 | 4 | 
| 5  | elm5 | 3 | 4 | 5 | 1 | 
-------------------------------------------------------- 

我現在有一個查詢,將塌陷的價值和給我的信息,我需要: SQL:SELECT tB.name,tB.varA,tB.varB,tB.varC ,tB.varD FROM tableB的TB GROUP BY tB.name

現在我想要做的是,而不必翻,varB等顯示爲數字,來代替已經與TableA的相關數據和插入的displayName 。因此,而不是

Result 
----------------------------------------------- 
| name | varA | varB | varC | varD | 
----------------------------------------------- 
| elm1 | 3 | 4 | 2 | 5 | 
| elm2 | 4 | 5 | 2 | 1 | 
----------------------------------------------- 

它會顯示:

Result 
----------------------------------------------- 
| name | varA | varB | varC | varD | 
----------------------------------------------- 
| elm1 | itemC | itemD | itemB | itemE | 
| elm2 | itemD | itemE | itemB | itemA | 
----------------------------------------------- 

回答

2

你只需要做分組後4聯接。

P.S.我不明白,爲什麼你在tableB中將名字分組。

假設你不必做groupung這種方式(在其他情況下,其他值沒有多大意義):

SELECT b.name, 
    aa.displayName as varA, 
    ab.displayName as varB, 
    ac.displayName as varC, 
    ad.displayName as varD 
FROM tableB as b 
JOIN tableA as aa ON b.varA = aa.id 
JOIN tableA as ab ON b.varB = ab.id 
JOIN tableA as ac ON b.varC = ac.id 
JOIN tableA as ad ON b.varD = ad.id;