我正在尝试在Google Big Query中实施MINUS操作,但看起来查询参考中没有文档。有人可以分享你对此的看法。我以前在常规SQL中完成了它,但不确定Google是否在Big Query中提供它。您的意见得到赞赏。谢谢。
答案 0 :(得分:3)
如果BigQuery不提供minus
或except
,您可以使用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;