2017-01-16 139 views
0

我想從表中選擇,我的問題是這個表中的一些列是外鍵,可以爲空。忽略空條件的SQL where條款

這些外鍵中的2個是獨佔的,如果其中一個有數據,另一個將爲空,反之亦然。因此,當我嘗試寫where子句時,其中一個將始終爲空,而我無法檢索任何數據。

例子:

Select 
    t1.col1, t1.col2, t1.pk1, t2.col3, t2.col4, t2.pk2, t3.col5, t3.pk3 
from 
    t1, t2, t3 
where 
    t2.pk2 = t1.pk2 
    and t3.pk3 = t1.pk3 

其中的一個條款的永遠是假的,因爲其中一列將始終在表1空。我的理想解決方案是在表1中的值爲空的情況下,使具體的where子句被忽略,但我不知道該怎麼做。

在此先感謝。

回答

4

使用LEFT JOIN代替:

Select t1.col1, t1.col2, t1.pk1, 
      t2.col3, t2.col4, t2.pk2, 
      t3.col5, t3.pk3 
From  t1 
Left Join t2 On t2.pk2 = t1.pk2 
Left Join t3 On t3.pk3 = t1.pk3 

通過使用INNER JOIN,你過濾不符合所有的條件JOIN記錄。一個OUTER JOIN將返回一個NULL值的外表(LEFT JOIN,右表的情況下)JOIN條件不滿足。

作爲便箋,你應該從來沒有FROM條款中使用逗號。這個舊的隱含的JOIN語法已被棄用over 25 years ago!

+0

非常感謝,很好地解釋。 –