使用conditional_true_event结果在子查询过滤时出现语法错误如何解决?
报错原因
window 属于SQL的保留关键字,你在子查询中将窗口函数计算结果的别名设为window后,外层WHERE子句中直接写window = 1时,数据库会将window识别为SQL语法关键字而非你自定义的字段名,因此触发语法错误。
解决方法
有两种常用的修复方案:
方案1:更换别名(更推荐)
将子查询中的别名替换为非保留关键字即可,比如改为window_id,修改后的查询语句如下:
select * from (select ts, symbol, bid, conditional_true_event(bid > 10.6) over(order by ts) as window_id from Tickstore3 where symbol = 'ABC') as t3 where window_id = 1;
该方案兼容性更强,不需要额外加转义符,也不会和后续语法规则冲突。
方案2:转义保留关键字
如果必须保留window作为字段名,使用对应数据库的转义符包裹字段名即可,多数数据库支持双引号转义:
select * from (select ts, symbol, bid, conditional_true_event(bid > 10.6) over(order by ts) as window from Tickstore3 where symbol = 'ABC') as t3 where "window" = 1;
如果是MySQL类数据库,可改用反引号 ` 包裹字段名。
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

