【问题标题】:Redshift unexpectedly returns a null value for items not found in a sub-queryRedshift 意外返回子查询中未找到的项目的空值
【发布时间】:2023-03-15 18:59:01
【问题描述】:

我的这个查询没有返回任何结果:

SELECT review_id
FROM review_table
WHERE review_id NOT IN (
    SELECT DISTINCT review_id
    FROM review_migration_table
)
ORDER BY review_id

但是,我希望它返回所有不在我的迁移表中的review_ids(我正在尝试识别所有未成功迁移的评论)。我期待非空结果的原因是我知道review_table 中的评论不在review_migration_table 中:

SELECT
    review_id,
    review_id NOT IN (
        SELECT DISTINCT review_id
        FROM review_migration_table
        WHERE filter_column = 170938)
FROM review_table
WHERE
    filter_column = 170938
ORDER BY review_id ASC

 review_id | ?column?
-----------+----------
 127260864 | f
 130811274 |
(2 rows)

为什么 Redshift 在此查询中为第二条记录返回“NULL”值?而且,更具体地说,如何让我的第一个查询返回 review_table不在 review_migration_table 中的 130811274(和其他评论)?

【问题讨论】:

    标签: sql null amazon-redshift notin


    【解决方案1】:

    你可以认为a NOT IN(b, c) 等同于NOT (a=b OR a=c)。我认为 review_migration_table 表的review_id 列中有一个 NULL 值,因此您有NOT (a=b OR a=NULL),如果a=b 将给出FALSE,如果a<>b 给出NULL。这里最简单的解决方法可能是从IN 列表中过滤掉NULL review_id,例如:

    SELECT
        review_id,
        review_id NOT IN (
            SELECT DISTINCT review_id
            FROM review_migration_table
            WHERE filter_column = 170938 and review_id IS NOT NULL)
    FROM review_table
    WHERE
        filter_column = 170938
    ORDER BY review_id ASC 
    

    【讨论】:

    • 是的 - 出乎意料的 NULL 值就是它。谢谢! (现在开始确定为什么那里有一个NULL 值...... =D)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2016-11-23
    • 2014-07-26
    • 2018-04-11
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多