2013-11-03 55 views
1

我試圖根據三個條件實現一個完整的外部連接,所有這些條件都由邏輯與連接起來。但是,第三個條件並不總是有效的:它基於名爲「counter」的列,在某些情況下,該列可能在我要加入的表中爲「null」。 讓我更詳細地解釋一下。 基本的加入對語句應該是這樣的:在連接條件下的SQL case語句

... table1 full outer join table2 
on (table1.1=table2.1 AND table1.2=table2.2 AND table1.counter=table2.counter) 

然而現在,在某些情況下table1.counter可能爲空,而table2.counter不是。在這些情況下,我想要在前兩種情況下進行連接,而忽略第三種情況。

我的想法是那樣做:

... table1 full outer join table2 
on (table1.1=table2.1 AND table1.2=table2.2 
AND table1.counter= case when table1.counter is null then null 
         else table2.counter 
        end) 

然而,這是不行的,因爲結果是完全一樣的,在第一個代碼,即第一個case語句永遠不會被觸發。但我不明白爲什麼?

任何提示或見解將大受歡迎!

回答

2

你可以嘗試這樣的:

AND (table1.counter IS NULL OR table1.counter=table2.counter) 

相反的:

AND table1.counter=table2.counter 

在第一個查詢。

+0

謝謝,這似乎工作! – user2949599

+0

不客氣,但不要忘記標記爲已解決;) –