2017-01-16 137 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

非常感谢,很好地解释。 –