如何在Google Big Query中实现MINUS运算符

时间:2015-06-08 22:06:43

标签: sql google-bigquery

我正在尝试在Google Big Query中实施MINUS操作,但看起来查询参考中没有文档。有人可以分享你对此的看法。我以前在常规SQL中完成了它,但不确定Google是否在Big Query中提供它。您的意见得到赞赏。谢谢。

3 个答案:

答案 0 :(得分:3)

如果BigQuery不提供minusexcept,您可以使用not exists执行相同的操作:

select t1.*
from table1 t1
where not exists (select 1
                  from table2 t2
                  where t2.col1 = t1.col1 and t2.col2 = t1.col2 . . .
                 );

这适用于非NULL值。对于NULL值,您需要更多努力。而且,这也可以写成left join

select t1.*
from table1 t1 left join
     table2 t2
     on t2.col1 = t1.col1 and t2.col2 = t1.col2
where t2.col1 is null;

其中一个应该被bigquery接受。

答案 1 :(得分:3)

我通常所做的与Linoff的答案类似,并且始终有效,独立于NULL文件:

SELECT t1.*
FROM table1 t1 LEFT JOIN
     (SELECT 1 AS aux, * FROM table2 t2)
     ON t2.col1 = t1.col1 and t2.col2 = t1.col2
WHERE t2.aux IS NULL;

这解决了可空字段的问题。 注意:即使这是一个旧帖子,如果有人在将来访问此页面,我只是为了完整性而发表评论。

答案 2 :(得分:2)

只是在此处添加更新,因为此帖子仍会出现在 Google 搜索中。 BigQuery 现在支持 EXCEPT 集合运算符。

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#except

select * from t1
EXCEPT DISTINCT
select * from t2;