我有2个表,两个表都包含不同的id值.某些id值可能出现在两个表中,有些值对于每个表都是唯一的.Table1有10,910行,Table2有11,304行
运行左连接查询时:
SELECT COUNT(DISTINCT a.id) FROM table1 a JOIN table2 b on a.id = b.id
我在两个表中共享了10,896行或10,896个ID.
但是,当我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时 - 看起来您正在以旧版SQL模式运行查询.
在BigQuery Legacy SQL中 - COUNT(DISTINCT)函数是概率性的 - 给出统计近似值,并不保证是精确的.
您可以使用EXACT_COUNT_DISTINCT()函数 - 这个函数可以为您提供确切的数字但后端稍贵一些
更好的选择 - 只需使用标准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