我有 2 个表,它们都包含不同的 id 值。有些 id 值可能出现在两个表中,有些值对于每个表都是唯一的。表 1 有 10,910 行,表 2 有 11,304 行
运行左连接查询时:
SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
我总共有 10,896 行或 10,896 个 ID 在两个表之间共享。
但是,当我在 2 个表上运行
FULL OUTER JOIN
时,如下所示:SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN EACH table2 b on a.id = b.id
我总共得到 10,896 行,但我期望 table1 中的所有 10,910 行。
我想知道我的查询语法是否有问题。
最佳答案
当您使用 EACH 时 - 看起来您是在 Legacy SQL 模式下运行查询。
在 BigQuery Legacy SQL 中 - COUNT(DISTINCT) 函数是概率性的 - 提供统计近似值,不保证准确。
您可以改用 EXACT_COUNT_DISTINCT() 函数 - 这个函数为您提供确切的数字,但在后端稍贵
更好的选择 - 只需使用 Standard SQL
对于您的特定查询,您只需要删除 EACH
关键字,它应该可以作为一个魅力
#standardSQL
SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
和
#standardSQL
SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN table2 b on a.id = b.id
关于google-bigquery - BigQuery 全外连接产生 "left join"结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41755073/