Join BigQuery子查询有效联接
我试图在BigQuery中分析firebase分析数据。我需要使用StandardSQL更新BigQuery中的表 我必须通过将表Join BigQuery子查询有效联接,join,google-bigquery,firebase-analytics,bigquery-standard-sql,Join,Google Bigquery,Firebase Analytics,Bigquery Standard Sql,我试图在BigQuery中分析firebase分析数据。我需要使用StandardSQL更新BigQuery中的表 我必须通过将表cart中的order\u标记添加到另一个表order来更新key='item\u id' 以下是查询: #standardSQL UPDATE `dataset.cart` c SET c.order_flag = true WHERE (SELECT value.string_value FROM UNNEST(c.event_dim.params
cart
中的order\u标记添加到另一个表order
来更新key='item\u id'
以下是查询:
#standardSQL
UPDATE `dataset.cart` c
SET c.order_flag = true
WHERE (SELECT value.string_value
FROM UNNEST(c.event_dim.params)
WHERE key = 'item_id') IN
(SELECT
(SELECT value.string_value
FROM UNNEST(o.event_dim.params)
WHERE key = 'item_id')
FROM `dataset.order` o
WHERE (SELECT key FROM UNNEST(o.event_dim.params)
WHERE key = 'item_id') =
(SELECT value.string_value FROM UNNEST(c.event_dim.params)
WHERE key = 'item_id'))
但我得到了一个错误:
错误:不支持引用其他表的相关子查询,除非它们可以取消相关,例如通过将它们转换为有效联接
在这种情况下,如何进行有效的联接?您的查询看起来有点奇怪,因为它有in子句和相关子查询(子查询同时使用a和c表)
这是一种反模式,通常表示查询中存在错误。因为通常IN子句子查询不跨表关联
EXISTS子句通常在子查询中需要相关性,但在子查询中不需要相关性。
这很可能会奏效:
UPDATE
`dataset.cart` c
SET
c.order_flag=TRUE
WHERE
(
SELECT
value.string_value
FROM
UNNEST(c.event_dim.params)
WHERE
key = 'item_id') IN (
SELECT
(
SELECT
value.string_value
FROM
UNNEST(o.event_dim.params)
WHERE
key = 'item_id')
FROM
`dataset.order` o
)
如果您决定切换到EXISTS,那么我建议您存储
(SELECT
value.string_value
FROM
UNNEST(o.event_dim.params)
WHERE
key = 'item_id')
分为单独的列,以使查询优化器能够简单方便地进行优化 您的查询看起来有点奇怪,因为它有IN子句和相关子查询(子查询同时使用a和c表)
这是一种反模式,通常表示查询中存在错误。因为通常IN子句子查询不跨表关联
EXISTS子句通常在子查询中需要相关性,但在子查询中不需要相关性。
这很可能会奏效:
UPDATE
`dataset.cart` c
SET
c.order_flag=TRUE
WHERE
(
SELECT
value.string_value
FROM
UNNEST(c.event_dim.params)
WHERE
key = 'item_id') IN (
SELECT
(
SELECT
value.string_value
FROM
UNNEST(o.event_dim.params)
WHERE
key = 'item_id')
FROM
`dataset.order` o
)
如果您决定切换到EXISTS,那么我建议您存储
(SELECT
value.string_value
FROM
UNNEST(o.event_dim.params)
WHERE
key = 'item_id')
分为单独的列,以使查询优化器能够简单方便地进行优化