【问题标题】:function is not null is not giving correct results on snowflake函数不为空在雪花上没有给出正确的结果
【发布时间】:2021-12-07 19:45:09
【问题描述】:

我正在对 2 个表进行左连接,我得到空值。我有一个条件说明日期时间不为空。但是,当我运行查询时,我仍然看到空值。

有人知道如何解决这个问题吗?

select 
*
from TBL_A A
LEFT JOIN 
(select 
    number_id, 
    country, 
    status, 
    number_of_days,
    datetime
FROM TBL_B) B 
    ON A.NUMBER_ID = B.NUMBER_ID
    AND A.STATUS = B.STATUS
    AND A.DATETIME < B.check_date
    AND B.datetime IS NOT NULL

【问题讨论】:

  • 您正在执行左连接。虽然连接条件要求您在匹配中不能有空日期时间,但这并不意味着您在结果中看不到空值。这就是左连接的全部意义所在。也许你的意思是inner join

标签: sql snowflake-cloud-data-platform


【解决方案1】:

我有一个条件说明 datetime IS NOT NULL 的位置

条件在ON级别:

select *
from TBL_A A
LEFT JOIN (select number_id,  country, status, number_of_days, datetime
           FROM TBL_B) B 
    ON A.NUMBER_ID = B.NUMBER_ID
    AND A.STATUS = B.STATUS
    AND A.DATETIME < B.check_date
    AND B.datetime IS NOT NULL  -- here

为了过滤掉NULLS,它应该在WHERE级别:

select *
from TBL_A A
LEFT JOIN (select number_id,  country, status, number_of_days, datetime
           FROM TBL_B) B 
    ON A.NUMBER_ID = B.NUMBER_ID
    AND A.STATUS = B.STATUS
    AND A.DATETIME < B.check_date
WHERE B.datetime IS NOT NULL 

但此刻INNER JOIN没有什么不同:

select *
from TBL_A A
JOIN (select number_id,  country, status, number_of_days, datetime
           FROM TBL_B) B 
    ON A.NUMBER_ID = B.NUMBER_ID
    AND A.STATUS = B.STATUS
    AND A.DATETIME < B.check_date
    AND B.datetime IS NOT NULL  -- here

【讨论】:

    【解决方案2】:

    在使用JOIN 之前,您不能像下面这样过滤查询吗?

     select 
            number_id, 
            country, 
            status, 
            number_of_days,
            datetime
        FROM TBL_B where datetime is not null
    

    【讨论】:

    • 感谢杰里米的编辑..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    相关资源
    最近更新 更多