google-bigquery - 为什么这个 BigQuery WHERE NOT IN 语句没有给出任何结果?
问题描述
我们预计这个 Google BigQuery 查询最多会删除 10 行结果——但这个查询给我们的结果为零——尽管表 A 有数千行都具有唯一的 ENCNTR_ID。
SELECT ENCNTR_ID
FROM `project.dataset.table_A`
WHERE ENCNTR_ID NOT IN
(
SELECT ENCNTR_ID
FROM `project.dataset.table_B`
LIMIT 10
)
如果我们使查询自引用,它的行为与预期一样:我们只删除了 10 行就得到了数千个结果。
SELECT ENCNTR_ID
FROM `project.dataset.table_A`
WHERE ENCNTR_ID NOT IN
(
SELECT ENCNTR_ID
FROM `project.dataset.table_A` # <--- same table name
LIMIT 10
)
我们做错了什么?为什么第一个查询给我们零个结果而不是只删除 10 行结果?
解决方案
解决方案:在处理可能的空值时使用NOT EXISTS
而不是:NOT IN
SELECT *
FROM UNNEST([1,2,3]) i
WHERE NOT EXISTS (SELECT * FROM UNNEST([2,3,null]) i2 WHERE i=i2)
# 1
以前的猜测 - 原来是原因:
SELECT *
FROM UNNEST([1,2,3]) i
WHERE i NOT IN UNNEST([2,3])
# 1
对比
SELECT *
FROM UNNEST([1,2,3]) i
WHERE i NOT IN UNNEST([2,3,null])
# This query returned no results.
里面有空project.dataset.table_B
吗?
推荐阅读
- typescript - 打字稿:带有枚举的通用函数
- angular - 键入“抽象控件 | null' 不可分配给类型 'FormGroup'
- hive - 按条件对行进行评级
- sql - 如何在 sql 中获取跳过级别管理器的详细信息?
- python-sphinx - numref 表是未定义的标签
- react-native - React native FlatList,垂直输出工作正常,但水平输出不行
- amazon-web-services - AWS - 防火墙管理器 - WAF 规则如何阻止来自 IP 地址的请求(无主机名)?
- optimization - 根据 Pyomo 的说法,这怎么可能是线性的?
- android - 更改camerax版本时遇到错误
- angular - 秋田查询 this.selectAll 在服务调用完成之前返回空列表