2012-11-16 28 views
2

請原諒我的無知在這個問題上,如果它是非常簡單的,但它的駕駛我瘋了,我已經搜索(嘗試和失敗)不同的解決方案,從本網站所以這裏去...SQL自然連接多個表,包括空

我正在使用SQL 2008並試圖從12個表中將結果導入單個查詢,所以我有;

DECLARE @RefID nvarchar(10) 
SET @RefID = 'test' 

SELECT * From 
Table1, 
Table2, 
Table3, 
Table4, 
Table5, 
Table6, 
Table7, 
Table8, 
Table9, 
Table10, 
Table11, 
Table12 

WHERE table1.[RefID] = @RefID 
AND Table2.[Ref ID] = @RefID 
AND Table3.[Ref ID] = @RefID 
AND Table4.[Ref ID] = @RefID 
AND Table5.[Ref ID] = @RefID 
AND Table6.[Ref ID] = @RefID 
AND Table7.[Ref ID] = @RefID 
AND Table8.[Ref ID] = @RefID 
AND Table9.[Ref ID] = @RefID 
AND Table10.[Ref ID] = @RefID 
AND Table11.[RefID] = @RefID 
AND Table12.[RefID] = @RefID ` 

現在這工作得很好,是很容易理解,並給了我一個行會的所有數據,這正是我一直在尋找..只是一個問題

如果記錄不存在中任何不是忽略,或乾脆給我空/空值該表的表, - 查詢壞了,我沒有得到任何結果

我會很感激的任何想法

TIA

+0

如果這是您的數據庫,那麼您需要重新設計它。如果它是由別人設計的,拿走他們的鍵盤,並給他們一本關於關係設計的書。 –

回答

0

實現了前兩個想法是不對的:

Select 
    * 
From (
    Select 
    @RefID RefID 
) a 
    Left Outer Join 
    Table1 
    On a.RefID = Table1.RefID 
    Table2 
    On a.RefID = Table2.RefID 
    Left Outer Join 
    Table3 
    On a.RefID = Table3.RefID 
    Left Outer Join 
    Table4 
    ... 
    Left Outer Join 
    Table12 
    On a.RefID = Table12.RefID 

如果你不想在一開始的額外REFID,然後用Table1.*, Table2.*, ...

+0

感謝勞倫斯,但同樣的問題 –

+0

對不起剛剛看到你的編輯我會嘗試 –

+0

@SQLBeginner抱歉,也有語法錯誤,認爲這已經修復了它。 – Laurence

2

更換*下面應該工作以及..

select * 
from (select RefID = @RefID) x 
left join Table1 t1 on t1.RefID = x.RefID 
left join Table2 t2 on t2.RefID = x.RefID 
left join Table3 t3 on t3.RefID = x.RefID 
left join Table4 t4 on t4.RefID = x.RefID 
left join Table5 t5 on t5.RefID = x.RefID 
left join Table6 t6 on t6.RefID = x.RefID 
left join Table7 t7 on t7.RefID = x.RefID 
left join Table8 t8 on t8.RefID = x.RefID 
left join Table9 t9 on t9.RefID = x.RefID 
left join Table10 t10 on t10.RefID = x.RefID 
left join Table11 t11 on t11.RefID = x.RefID 
left join Table12 t12 on t12.RefID = x.RefID