【问题标题】:Why do I get a LEFT OUTER JOIN error msg when i'm not even using a left join?为什么我什至没有使用左连接时会收到左外连接错误消息?
【发布时间】:2021-06-02 09:53:07
【问题描述】:

LEFT OUTER JOIN 不能在没有连接两边的字段相等的条件下使用。

为什么在运行以下查询时会收到上述 BQ 错误消息?我没有使用任何左外连接。谢谢!

SELECT *
FROM
   (SELECT
        *
      , (select sum(transaction_amount) from `analytics-111.tmp.coll` where transaction_date_est <= mq.transaction_date_est) RunningTotal      
   FROM `analytics-111.tmp.coll` mq) mq2
WHERE mq2.RunningTotal < 1000 ```

【问题讨论】:

  • 选择和子查询可能被转换为左连接(内部)。
  • 从来没有遇到过 bq,我的猜测是为每个表尝试别名。

标签: sql google-bigquery bq


【解决方案1】:

子查询只是表达left join 的另一种方式。优化器在重写查询后识别出问题——错误消息不知道原始代码是LEFT JOIN 还是相关子查询。错误消息可以修复。

很高兴,您可以使用累积和来计算:

SELECT mq.*,
       SUM(mq.transaction_amount) OVER (ORDER BY transaction_amount) as RunningTotal      
FROM `analytics-111.tmp.coll` mq
QUALIFY mq.RunningTotal < 1000;

请注意,这使用了新的 QUALIFY 子句,它允许您过滤窗口函数。

【讨论】:

  • 不幸的是,由于一些内部限制,我无法使用窗口函数 - 这就是我尝试替代方法的原因。还是谢谢!
  • @user15067132 。 . .这对我来说没有意义。 BigQuery 支持窗口函数。您可以在内部做什么来阻止使用受支持的标准功能?
猜你喜欢
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2011-02-12
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多