Google bigquery 为什么这个BigQuery在语句中没有给出结果?

Google bigquery 为什么这个BigQuery在语句中没有给出结果?,google-bigquery,Google Bigquery,我们预计这个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行,就得到数

我们预计这个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:

挑选* 来自UNNEST[1,2,3]i 如果不存在,则从UNNEST[2,3,null]i2中选择*其中i=i2 1. 之前的猜测-结果是原因:

挑选* 来自UNNEST[1,2,3]i 如果我不在UNNEST[2,3] 1. vs

挑选* 来自UNNEST[1,2,3]i 其中我不在UNNEST[2,3,null] 此查询未返回任何结果。
该project.dataset.table_B中是否存在空值?

这是意外的行为,但完全正确。在SO Felipe上,你一直是BigQuery的救星——我希望谷歌和我们一样感谢你!