2013-01-18 75 views
2

我有以下3個數據表SQL Server 2005中加入的問題

Options Table 
UID (pk) SID (pk) TID (pk) 
-------------------------- 
1  20  2 
1  20  3 
1  13  3 
1  14  4 

Types Table 
TID (pk) TText 
-------------------------- 
1  Text 1 
2  Text 2 
3  Text 3 
4  Text 4 

Sets Table 
SID (pk) SText 
-------------------------- 
13  Set 13 
14  Set 14 
20  Set 20 

我試圖得到如下的輸出,從選項表中只有4行,但與其他2對應的文本表。我的加入似乎離不開。

我想要的結果是:

UID (pk) SID (pk) TID (pk) SText  TText 
------------------------------------------------------ 
1  20  2   Set 20  Text 2 
1  20  3   Set 20  Text 3 
1  13  3   Set 13  Text 3 
1  14  4   Set 14  Text 4 
+0

發表您的SQL查詢 – Raj

回答

1
SELECT a.*, b.Stext, c.TText 
FROM Options a 
     INNER JOIN Sets b 
      ON a.SID = b.SID 
     INNER JOIN Types c 
      ON a.TID = c.TID 

更新1

添加DISTINCT

SELECT DISTINCT a.*, b.Stext, c.TText 
FROM Options a 
     INNER JOIN Sets b 
      ON a.SID = b.SID 
     INNER JOIN Types c 
      ON a.TID = c.TID 
+0

HMM這就是我的,但我得到六個結果 – cdub

+1

@chris看到更新,添加'​​DISTINCT' –

+1

我發現我的問題出在問題上。它讓我失望。我正在使用一箇舊的測試數據庫,其中一組沒有PK集並且有一個副本。將其設置爲具有固定數據的唯一數據的PK。謝謝。 – cdub

0
SELECT O.UID,O.SID,O.TID,T.TText,S.SText 
FROM Options O 
INNER JOIN Types T ON 
    T.TID = O.TID 
INNER JOIN Sets S ON 
    S.SID = O.SID 
0

你可以試試這個:

SQLFIDDLE DEMO

編輯:使用不同的SQL Server以來的第一個查詢是寫在MySQL

select distinct o.*, t.ttext, s.stext from 
    options o 
    inner join 
    types t 
    on o.tid = t.tid 
    left join 
    sets s 
    on s.sid = o.sid 
    ; 

select o.*, t.ttext, s.stext from 
options o 
inner join 
types t 
on o.tid = t.tid 
left join 
sets s 
on s.sid = o.sid 
group by o.uid, o.tid, o.sid 
; 

| UID | SID | TID | TTEXT | STEXT | 
------------------------------------- 
| 1 | 20 | 2 | Text 2 | Set 20 | 
| 1 | 13 | 3 | Text 3 | Set 13 | 
| 1 | 20 | 3 | Text 3 | Set 20 | 
| 1 | 14 | 4 | Text 4 | Set 14 | 
+0

@Chris檢查了這個請:)由於你使用的是sql server(這是mysql),你將不得不使用不同的:) – bonCodigo