为啥我什至没有使用左连接时会收到左外连接错误消息?
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 支持窗口函数。您可以在内部做什么来阻止使用受支持的标准功能?以上是关于为啥我什至没有使用左连接时会收到左外连接错误消息?的主要内容,如果未能解决你的问题,请参考以下文章
在 Redshift 更新查询中使用左外连接导致错误:目标表必须是等连接谓词的一部分