【发布时间】:2020-04-08 16:37:42
【问题描述】:
当我在真实表上运行查询时出现错误:
Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN
这是我正在运行的确切查询:
SELECT
CASE WHEN addresses LIKE '%,%'
THEN
(
SELECT STRING_AGG(DISTINCT address) addresses
FROM VW_CLEAN.TABLE_1
WHERE member_id = el.member_id
AND eligible_month < el.eligible_month
GROUP BY member_id, eligible_month
ORDER BY eligible_month DESC
LIMIT 1
)
END AS address,
eligible_month,
member_id
FROM
(
SELECT STRING_AGG(DISTINCT address) addresses, eligible_month, member_id FROM
(
SELECT DISTINCT address, eligible_month, member_id
FROM VW_CLEAN.TABLE_1
UNION ALL
SELECT DISTINCT address, eligible_month, member_id
FROM VW_CLEAN.TABLE_2
)
GROUP BY eligible_month, member_id
) el
WHERE member_id IS NOT NULL
AND eligible_month IS NOT NULL
但是当我使用“WITH AS”为测试数据准备相同的查询时,它运行时没有错误。
#standardSQL
WITH table_1 AS (
SELECT "201905" AS month, "11111" AS member, "123" AS address
UNION ALL
SELECT "201903" AS month, "11111" AS member, "234" AS address
UNION ALL
SELECT "201902" AS month, "11111" AS member, "345" AS address
UNION ALL
SELECT "201902" AS month, "22222" AS member, "456" AS address
UNION ALL
SELECT "201901" AS month, "22222" AS member, "567" AS address
),
table_2 AS (
SELECT "201904" AS month, "11111" AS member, "678" AS address
)
SELECT
a.member,
a.month,
(
SELECT STRING_AGG(address) address
FROM table_1
WHERE member = a.member
AND month < a.month
GROUP BY member, month
ORDER BY month DESC
LIMIT 1
) AS previous_address
FROM
(
SELECT STRING_AGG(address) address, month, member
FROM
(
SELECT month, member, address
FROM table_1
UNION ALL
SELECT month, member, address
FROM table_2
)
GROUP BY month, member
HAVING member = '11111' AND month = '201905'
) a
那么真实表和使用“WITH AS”创建的表有什么区别?
编辑器需要更多的文字来保存描述,所以我添加了TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT文字文字文字文字文字文字文字文字文字
【问题讨论】:
标签: google-bigquery