为什么我在 JOIN 中得到不明确的字段名称“x”

Mik*_*ant 3 google-bigquery

事实 1 - 我在 BigQuery Web UI 中成功运行了如下简单查询

SELECT
  a.id AS id,
  b.v AS v,
  c.w AS w
FROM (SELECT 1 AS id, "abc" AS x, "xyz" AS y) AS a
LEFT JOIN (SELECT "abc" AS x, "111" AS v) AS b ON a.x = b.x
LEFT JOIN (SELECT "xyz" AS y, "222" AS w) AS c ON a.y = c.y  
Run Code Online (Sandbox Code Playgroud)

事实 2 - 当我尝试使用以下选项将[相同查询的]结果写入表时 - 它失败了!

在此输入图像描述

事实 3 - 使用以下选项对表进行相同的查询 -成功

在此输入图像描述

问题- 为什么我会收到此错误?

注意
我在 SO 之外被问到这个问题,所以决定在这里分享。
正如您所看到的“解决方法”是“找到的” - 因此,如果没有附带实际问题的解释/答案,请不要建议如何重写查询。

小智 5

今天早上我在尝试保存视图时遇到了类似的问题,并发现其他人在 Web UI 和批处理之间切换时也遇到了这个问题。根据我的收集,这是一个通过三重连接可以获得的奇怪的极端情况。

我发现有助于弄清楚发生了什么,特别是这一点:

“这里的根本问题是,查询中最终 JOIN 的左侧源试图将 [ax] 和 [bx] 折叠到同一范围内,两者都具有名称“x”,并导致此错误。”

有人在Google BigQuery 官方问题和功能跟踪器上提出了类似的问题,并参考了上面的 SO 帖子。

希望其中之一能帮助澄清这一点。