2013-03-29 71 views
-3

MainTable兩個以上的表使用連接

ID Column1   TableA.fK TableB.fk 
1 some-value  1   null 
2 some-value  1   1 
3 some-value  null  2 

表A

TableA.pk Column1 
1   some-value 

表B

TableB.pk Column1 
1   some-value 
2   some-value 
Select Main.ID,Main.Column1 ,A.Column1,B.Column1 
FROM MainTable main 
LEFT JOIN 
     Table A 
ON  Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
     TableB b 
ON  Main.TableB.fk =B.TableB.fk 
WHERE Main.ID =1 

手段

結果是

ID Column1  A.Column1 B.Column1 
    1 some-value some-value null 

期待輸出

ID column1   A.Column1 
1  some-value  some-value 

不應顯示B.column1

時表外鍵值也沒有null,則應該從表A得到的所有細節,如果上述SELECT查詢使用RDBMS的Microsoft SQL Server 2008

+2

如果你只需要'ID'和'A.Column1',爲什麼你在'SELECT'中包含'B.Column1'? –

回答

0

我這裏不明白的問題這裏使用
IM。如果您不希望它顯示 B.Column1,請從 Select聲明中取 B.Column1

你現在有

選擇Main.ID,A.Column1,B.Column1

將其更改爲

選擇Main.ID,A.Column1

根據您的意見,似乎你正在尋找CoalesceIsNull,這取決於你正在使用哪個DBMS(你也沒有在你的問題中告訴我們)。

像這樣的東西應該工作:

SELECT 
    Main.ID, Coalesce(A.Column1, B.Column1) as Column1 
FROM  
    MainTable main 
LEFT JOIN 
    Table A 
ON  
    Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
    TableB b 
ON 
    Main.TableB.fk = B.TableB.fk 
WHERE 
    Main.ID = 1 
+0

這是原始問題(*已被刪除*)[Link Here](http://stackoverflow.com/questions/15697307/how-to-use-coalesce)。該操作只想投影*非空*列。所以基本上我對OP的建議是使用* dynamic sql *。 –

+0

我需要兩個表,如果兩個表的外鍵不爲空 –

+1

@JW:啊,是的。這些知識確實改變了很多。我會刪除這個答案。感謝您的高舉。 :-) –

0

只是不要把此列進名單SELECT

SELECT Main.ID, A.Column1 
FROM MainTable main 
LEFT JOIN 
     Table A 
ON  Main.TableA.fk = A.TableA.pk 
LEFT JOIN 
     TableB b 
ON  Main.TableB.fk = B.TableB.fk 
WHERE Main.ID = 1 
+0

這是原來的問題(*已被刪除*)[鏈接這裏](http://stackoverflow.com/questions/15697307/how-使用的,聚結)。該操作只想投影*非空*列。所以基本上我對OP的建議是使用* dynamic sql *。 –

0

從查詢中刪除B.Column1

Select Main.ID,A.Column1 FROM MainTable main LEFT JOIN Table A ON Main.TableA.fk=A.TableA.pk LEFT JOIN TableB b ON Main.TableB.fk =B.TableB.fk WHERE Main.ID =1