sql - Redshift 意外返回子查询中未找到的项目的空值
问题描述
我有这个查询没有返回任何结果:
SELECT review_id
FROM review_table
WHERE review_id NOT IN (
SELECT DISTINCT review_id
FROM review_migration_table
)
ORDER BY review_id
但是,我希望它会返回所有review_id
不在我的迁移表中的 s(我正在尝试识别所有未成功迁移的评论)。我期待非空结果的原因是我知道有评论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”值?而且,更具体地说,我怎样才能让我的第一个查询返回 130811274 (和其他评论)在review_table
但不在 review_migration_table
?
解决方案
你可以认为a NOT IN(b, c)
相当于NOT (a=b OR a=c)
。我认为review_id
review_migration_table 表的列中有一个 NULL 值,因此你有NOT (a=b OR a=NULL)
哪个会给出FALSE
ifa=b
或 NULL if a<>b
。这里最简单的解决方法可能是review_id
从IN
列表中过滤掉 NULL,例如:
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
推荐阅读
- ios - 如何让 Firebase 与 TableView 配合得很好
- mysql - 插入前触发器中的子字符串、计数和连接?
- java - Storing value from data.properties as a string
- css - 使用嵌套选择器和 vuejs css 模块
- version-control - Shopify 版本控制
- reactjs - React Router/WithRouter not redirecting even with WithRoute
- angular - Passing Oauth token data from service to component - Angular
- python - Python - Apache Tika 单页解析器
- html - Hide column on smaller screens only with Bootstrap 4
- firefox - 如何阻止 Firefox 在本地开发服务器上强制 https://?