相当于子查询的“JOIN EACH”

Posted

技术标签:

【中文标题】相当于子查询的“JOIN EACH”【英文标题】:Equivalent of "JOIN EACH" for a subquery 【发布时间】:2013-11-12 18:31:11 【问题描述】:

我正在尝试使用大型子查询运行查询,但出现以下错误:表太大,无法连接。考虑使用 JOIN EACH。详情请见https://developers.google.com/bigquery/docs/query-reference#joins。

那么,对于子查询,是否有相当于 JOIN EACH 的方法,我可以在其中加入大于 8mb 的表?我在文档中或四处搜索时都没有看到任何内容。这是我正在使用的查询——如果有办法重写它以更好地适应 bigquery 模型,那么我也对此持开放态度。

SELECT *
FROM [x.y]
WHERE column_hash NOT IN (
SELECT column_hash from [x.z]
)

【问题讨论】:

为什么不能在查询中加入“JOIN EACH”? 【参考方案1】:

您正在执行的查询是反连接,而不是子查询。您可以将其重写为显式连接,但它有点冗长:

SELECT y.* -- Note you may have to expand out these fields yourself
FROM [x.z] as z
LEFT OUTER JOIN EACH [x.y] as y ON y.column_hash = z.column_hash
WHERE y.column_hash is NULL

【讨论】:

感谢乔丹!在我的情况下,实际查询是“SELECT y.* FROM [x.y] as y LEFT OUTER JOIN EACH [x.z] as z ON y.column_hash = z.column_hash WHERE z.column_hash IS NULL”,它具有与您提供的查询,但被颠倒了。我需要复习一下我的 SQL...

以上是关于相当于子查询的“JOIN EACH”的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#SQL 子查询

sql子查询

当我使用 join each 时,查询执行期间资源超出

Redshift:连接到由表中的 SELECT * 组成的子查询/CTE 相当于连接表本身,还是性能下降?

mysql中not in怎么使用

2017-03-12SQL Sever 子查询聚合函数