2012-10-05 36 views
1

我有以下表格:UNION ALL SQL查詢 - 如何綁定三個表

T1

ID PRIORITY 
    1  1 
    2  1 
    3  2 
    4  4 

T2

ID SERVICE 
1 PSTN 
1 ADSL 
3 ADSL 

T3

ID DEVICE 
1 BSC1 
3 BSC7 
4 BSC7 

我想作爲輸出

ID PRIORITY SERVICE/DEVICE 
1  1  PSTN 
1  1  ADSL 
1  1  BSC1 
2  1 
3  2  ADSL 
3  2  BSC7 

如何使用UNION ALL綁定這些表?此外,我必須把WHERE子句T1 WHERE PRIORITY!=4

在輸出表

總數爲一個ID應T2 + T3的摘要(FOR ID = 1 2 + 1 = 3),但對於ID = 2也SHOULD表格輸出中存在空白的第二列。

謝謝

回答

3

如果你還好只使用一個UNION而不是UNION ALL這應該給你想要的東西

SELECT t1.Id, t1.Priority, COALESCE(t2.Service, '') AS [Service/Device] 
FROM t1 
LEFT JOIN t2 ON t1.Id = t2.Id 
WHERE t1.Priority != 4 

UNION 

SELECT t1.Id, t1.Priority, COALESCE(t3.Device, '') AS [Service/Device] 
FROM t1 
LEFT JOIN t3 ON t1.Id = t3.Id 
WHERE t1.Priority != 4 

SQL Fiddle example

+0

感謝答覆...我會盡快嘗試,但你確定我會得到重複的ID值,因爲這是我想要的? – Dejan

+0

我現在在小提琴中看到它..感謝我現在就試試我的 – Dejan

+0

對於id 2,我會在Service/device列中得到空白還是空白輸出?空白更合適,但我在小提琴看到有空? – Dejan

1
select T1.id , T1.PRIORITY ,T2.SERVICE as service/Device from t1 
left outer join T2 on T2.id=T1.id where T1.PRIORITY!=4 
union all 
select T1.id , T1.PRIORITY ,T3.DEVICE as service/Device from t1 
left outer join T3 on T3.id=T1.id where PRIORITY!=4