【问题标题】:Ignore SQL where clause on null cases忽略空情况下的 SQL where 子句
【发布时间】:2017-05-31 13:47:16
【问题描述】:

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

这些外键中有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

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

提前致谢。

【问题讨论】:

    标签: sql select plsql where-clause


    【解决方案1】:

    改用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 将为不满足JOIN 条件的外部表(在LEFT JOIN 的情况下为右侧表)返回NULL 值。

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

    【讨论】:

    • 非常感谢,解释得很好。
    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2021-02-13
    • 2020-01-28
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多