Clickhouse中WITH子句变量与列名重名的解决方法问询
在ClickHouse中使用与列名同名的WITH变量的替代方案
ClickHouse中,当WITH子句定义的变量与表列同名时,表列的引用优先级更高,所以你遇到的WITH addMinutes(mydate,300) AS mydate SELECT mydate FROM "mytable"会优先返回原表列值,而非WITH变量的值。以下是两种可行的替代方案:
方案一:给表指定别名,限定原列引用
通过给表设置别名,在WITH中用别名明确指向原表列,这样SELECT中的同名标识符会优先匹配WITH定义的变量:
WITH addMinutes(t.mydate, 300) AS mydate SELECT mydate FROM mytable t
执行该语句时,SELECT中的mydate会使用WITH子句中经过addMinutes处理后的值,而非原表的mydate列。
方案二:子查询重命名原列
先通过子查询将原表列重命名为其他名称,再在外部WITH子句中基于重命名后的列生成目标变量:
WITH addMinutes(original_mydate, 300) AS mydate SELECT mydate FROM (SELECT mydate AS original_mydate FROM mytable)
子查询把原mydate列重命名为original_mydate,外部WITH基于该列生成mydate变量,动态SELECT中的mydate就会指向处理后的变量值。
内容的提问来源于stack exchange,提问作者Rejo Chandran
相关产品推荐
相关产品推荐

