Google bigquery BigQuery完全外部联接生成“左联接”结果

Google bigquery BigQuery完全外部联接生成“左联接”结果,google-bigquery,Google Bigquery,我有两个表,它们都包含不同的id值。有些id值可能出现在两个表中,有些id值对于每个表都是唯一的。表1有10910行,表2有11304行 运行左联接查询时: SELECT COUNT(DISTINCT a.id) FROM table1 a JOIN table2 b on a.id = b.id 我在两个表中总共共享了10896行或10896个ID 但是,当我在两个表上运行完全外部联接时,如下所示: SELECT COUNT(DISTINCT a.id) FROM table1 a FULL

我有两个表,它们都包含不同的id值。有些id值可能出现在两个表中,有些id值对于每个表都是唯一的。表1有10910行,表2有11304行

运行左联接查询时:

SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
我在两个表中总共共享了10896行或10896个ID

但是,当我在两个表上运行完全外部联接时,如下所示:

SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN EACH table2 b on a.id = b.id
我总共得到10896行,但我希望表1中的10910行都是


我想知道我的查询语法是否有问题。

当您使用每个查询时,看起来您是在传统SQL模式下运行查询。 在BigQuery中,遗留SQL函数是概率函数,提供统计近似值,不能保证精确。 您可以改为使用函数-此函数提供确切的数字,但后端的成本稍高

更好的选择-只需使用 对于您的特定查询,您只需要删除每个关键字,它应该作为一个魅力

标准SQL 选择a.id 来自表1 a 在a.id=b.id上连接表2 b 及

标准SQL 选择a.id 来自表1 a a.id=b.id上的完全外部联接表2 b
我将原始查询添加为子查询,并计算ID数并生成预期结果。仍然有点奇怪,但它是有效的

SELECT EXACT_COUNT_DISTINCT(a.id)
FROM
(SELECT a.id AS a.id,
b.id AS b.id
FROM table1 a FULL OUTER JOIN EACH table2 b on a.id = b.id))

这是因为在这两种情况下,都使用countdistinct a.id来计算表a的非空行数。
使用计数*,它应该会起作用。

您是否按照我下面的建议尝试过standardSQL?-了解结果有助于进一步的故障排除从表1中选择准确的\u COUNT \u DISTINCTa.id a完全外部连接a.id=b.id上的每个表2 b这也返回了10896。我还尝试过只选择没有聚合的单个id列,但仍然收到10896行。这听起来像是一个问题/错误,您可以在