首页 文章

忽略关于null case的SQL where子句

提问于
浏览
0

我正在尝试从表中进行选择,我的问题是此表中的某些列(外键)可以为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

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

提前致谢 .

1 回答

  • 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 ,您're filtering the records that don' t满足所有 JOIN 条件 . OUTER JOIN 将返回外表的 NULL 值(如果是 LEFT JOIN ,右侧表),则不满足 JOIN 条件 .

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

相关问题