我正在尝试分析BigQuery中的firebase分析数据。我需要使用StandardSQL更新BigQuery中的表。
我必须将表order_flag
cart
中的key = 'item_id'
更新为order
,方法是将其加入另一个表#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'))
。
以下是查询:
<form>
但我收到错误:
错误:不支持引用其他表的相关子查询,除非它们可以解相关,例如将它们转换为有效的JOIN。
如何在这种情况下进行有效的连接?
答案 0 :(得分:2)
您的查询看起来有点奇怪,因为它具有带有相关子查询的IN子句(子查询同时使用a和c表)。
哪种反模式通常表示查询错误。因为通常IN子句子查询不是跨表关联的。
EXISTS子句通常需要子查询中的相关性,但不需要IN。 这最有可能发挥作用:
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')
进入单独的列,以便为查询优化器提供简单易用的优化。