aug*_*lec 5 sql google-bigquery
这个查询:
SELECT x
FROM dataset.table_a
WHERE x NOT IN (SELECT x FROM dataset.table_b)
Run Code Online (Sandbox Code Playgroud)
即使以下情况也返回零记录:
字段包含 1,326,932x个table_a不同的字符串值
字段包含 18,885x个table_b不同的字符串值
我不懂为什么。此外,在 BigQuery 旧版 SQL 中,此查询会返回正确的答案。
我怀疑我知道答案——这是由于使用旧版 SQL 时的错误处理NULL,NOT IN而标准 SQL 的行为与 SQL 标准一致。有一个文档错误可以将其添加到迁移指南中,但尚未解决。
IN 的文档 ( https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#in-operators ) 指出:
IN 列表中带有 NULL 的 IN 只能返回 TRUE 或 NULL,不能返回 FALSE
您可以通过此查询实现所需的行为,NOT EXISTS而是使用:
SELECT x
FROM dataset.table_a AS t
WHERE NOT EXISTS (
SELECT 1 FROM dataset.table_b
WHERE t.x = x
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |