当我什至不使用左连接时,为什么会收到 LEFT OUTER JOIN 错误消息?

问题描述

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 ```

解决方法

子查询只是表达 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 子句,它允许您过滤窗口函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...