Google bigquery 为什么这个BigQuery在语句中没有给出结果?
我们预计这个Google BigQuery查询最多会删除10行结果——但这个查询不会给我们任何结果——尽管表A有数千行,所有行都具有唯一的ENCNTR_IDGoogle 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行,就得到数
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的救星——我希望谷歌和我们一样感谢你!