为啥我什至没有使用左连接时会收到左外连接错误消息?

Posted

技术标签:

【中文标题】为啥我什至没有使用左连接时会收到左外连接错误消息?【英文标题】: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,我的猜测是为每个表尝试别名。 【参考方案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 支持窗口函数。您可以在内部做什么来阻止使用受支持的标准功能?

以上是关于为啥我什至没有使用左连接时会收到左外连接错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

与子查询相比,为啥左外连接查询给出不同的结果?

使用扩展方法/查询语法在 LINQ 中需要左外连接

在 Redshift 更新查询中使用左外连接导致错误:目标表必须是等连接谓词的一部分

使用内连接,左外连接,交叉应用获取语法错误与 Where 子句

Linq表达式多个左外连接错误

左外连接和右外连接的区别