在联合上运行简单的相关子查询(如下)时,出现错误:
不支持引用其他表的相关子查询,除非可以将它们取消相关,例如将它们转换为有效的JOIN。
如果我删除联合,则查询工作正常。没有工会怎么能得到相同的结果?
with data as (
select * from `bigquery-public-data.samples.shakespeare`
union all
select * from `bigquery-public-data.samples.shakespeare`
)
select
*,
(select count(*) from data where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d
答案 0 :(得分:3)
不支持引用其他表的相关子查询,除非可以将它们取消相关,例如将它们转换为有效的JOIN。
作为错误状态,您在WITH
对象中的UNION存在问题。
由于我看不到用表本身进行联合的逻辑,一个简单的解决方案是像这样删除UNION
with data as (
select * from `bigquery-public-data.samples.shakespeare`
)
select
*,
(select count(*) from data where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d
产生这些结果的
答案 1 :(得分:0)
基于强制BigQuery重新计算联合表的hacky解决方案:
with data as (
select * from `bigquery-public-data.samples.shakespeare`
union all
select * from `bigquery-public-data.samples.shakespeare`
), data_reshuffled as (
SELECT d.*
FROM (
SELECT ANY_VALUE(d) d
FROM (
SELECT GENERATE_UUID() uuid, d
FROM data d
)
GROUP BY uuid
)
)
select
*,
(select count(*) from data_reshuffled where word = d.word) word_count_2
from `bigquery-public-data.samples.shakespeare` d