忽略关于null case的SQL where子句

时间:2017-01-16 16:48:25

标签: sql select plsql where-clause

我正在尝试从表中进行选择,我的问题是此表中的某些列(外键)可以为null。

这些外键中的2个是独占的,如果其中一个具有数据,则另一个将为空,反之亦然。因此,当我尝试编写where子句时,其中一个将始终为null,并且我无法检索任何数据。

示例:

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

其中一个子句将始终为false,因为其中一个列在table1上始终为null。我理想的解决方案是在表1的值为null的情况下使特定的where子句被忽略,但我不知道该怎么做。

提前致谢。

1 个答案:

答案 0 :(得分: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条件不满足。< / p>

作为旁注,您应该从不FROM子句中使用逗号。旧的隐式JOIN语法已弃用over 25 years ago!