我有 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/

10-10 14:48
查看更多