2009-05-18 52 views
3

我試圖從2個表加入一些數據,但在幾列上。這裏有一個例子:加入幾列的SQL查詢

來源

ID |說明| AAAA | BBBB |

表2

ID |文| ID1 | ID2 | ID3 |

其中ID1,ID2和ID3在表2來自來源表ID的

我願意做這產生結果的查詢:

Table2.Text, 
Source.Desc(ID1), 
Source.AAAA(ID1), 
Source.Desc(ID2), 
Source.AAAA(ID2), 
Source.Desc(ID3), 
Source.AAAA(ID3) 

我d猜這會是一個連接,但我不能讓語法正確......或者我會更好與一個聯盟?

回答

1

如果不是所有的源表在表2填充,這仍然會給你的部分結果:

SELECT 
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
    FROM Table2    t 
     LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID 
     LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID 
     LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID 
    WHERE [email protected] 
1

三加入應該做的伎倆:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text 
from Source A 
inner join Table2 B1 on B1.ID1=A.ID 
inner join Table2 B2 on B2.ID2=A.ID 
inner join Table2 B3 on B3.ID3=A.ID 
6

你可以只使用多個連接,你能不能?例如:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
FROM Table2 tb 
    INNER JOIN Source s1 ON tb.ID1 = s1.ID 
    INNER JOIN Source s2 ON tb.ID2 = s2.ID 
    INNER JOIN Source s3 ON tb.ID3 = s2.ID 
+0

這正是奏效了:) – geocoin 2009-05-18 16:03:30

+0

補充:獲得我所需要的確切的結果,我用左外連接,但這只是我的具體情況。 – geocoin 2009-05-18 16:10:00

+0

對不起搶奪選定的答案,KM的是更正確的我的情況... – geocoin 2009-05-18 16:13:15

4

您需要連接到源表三次,每個ID一個。你也可以嘗試一個unuion來看看哪個更好。

這是一個糟糕的表格設計(它應該被標準化),如果可能的話,我建議你現在改變它。有一個單獨的記錄與每個ID相關的表,然後你可以加入一次,它將更有效,並且更容易編寫代碼,並且你不需要在需要的那一天更改表結構和所有查詢ID4。