大查询错误"View X is self-referencing"



我正在从legacysql迁移到标准ql,我在遗产中有效的相对简单查询上遇到了一个错误。

错误是"查看myproject.mydataset.vw_1是自我引用"。

#standardSQL
SELECT a.LineItemID
FROM
  (
  SELECT
    LineItemID,
    EXTRACT(YEAR FROM DATE(`Date`)) AS Order_Year
  FROM
    `myproject.mydataset.vw_1`
  ) a  
LEFT JOIN
  `myproject.mydataset.vw_2` b
  ON
    b.Line_Item_ID = a.LineItemID
LEFT JOIN
  `myproject.mydataset.vw_3` c
  ON
    c.Line_Item_ID = a.LineItemID

有2个视图(别名b和c(左尾为1个子查询(被称为a(。

请注意,vw_2和vw_3均返回每个列1列(line_item_id(,并且它们都从`myproject.mydataset.vw_1中选择。我怀疑这个问题与每个查询相同的观点的这两个观点有关,但是奇怪的是它可以在遗产中起作用而不是标准性。

如果我要评论"与表别名b"或"表别名c"的加入,则查询可以正常运行并返回a.lineEtemid。当B和C连接时,它仅给出"视图x是自我引用"错误。

我尝试用类似的子查询来替换B和C的连接,以指定列名称line_item_id,但给出了相同的错误。

LEFT JOIN
  (select Line_Item_ID from `myproject.mydataset.vw_2) b
  ON
    b.Line_Item_ID = a.LineItemID
LEFT JOIN
  (select Line_Item_ID from `myproject.mydataset.vw_3) c
  ON
    c.Line_Item_ID = a.LineItemID

VW_1的定义是以下内容。请注意,它查询了一个分区的表。此视图使用table_date_range是传统sql。

#standardSQL
SELECT
  *
FROM
  `myproject.mydataset.orders_daily_*`
WHERE
  _TABLE_SUFFIX >= '20170101'

从您发布的内容中不会出现这种方式,但是myproject.mydataset.orders_daily_*的Star扩展也可能包括视图(在_TABLE_SUFFIX上的过滤器之前(?如果是这种情况,您要么需要给出视图不同的名称,要么使用更长的前缀为通配符表,以便它不包含其扩展中的视图。

最新更新