Open CharlesWone opened 1 year ago
发完整的能重现问题的sql出来。
发完整的能重现问题的sql出来。
String sql = "WITH a AS(SELECT 1) SELECT * FROM a";
ParameterizedOutputVisitorUtils.parameterize(sql, DbType.clickhouse, null, null, null);
with as这种sql,这个方法这里报错
发完整的能重现问题的sql出来。
String sql = "WITH a AS(SELECT 1) SELECT * FROM a"; ParameterizedOutputVisitorUtils.parameterize(sql, DbType.clickhouse, null, null, null);
with as这种sql,这个方法这里报错
看官方语法是 as后面的变量名,确认sql没有写错吗? 是不是应该这样写:
WITH (SELECT 1) AS a SELECT * FROM a
这样解析是没有问题的。
https://clickhouse.com/docs/zh/sql-reference/statements/select/with
发完整的能重现问题的sql出来。
String sql = "WITH a AS(SELECT 1) SELECT * FROM a"; ParameterizedOutputVisitorUtils.parameterize(sql, DbType.clickhouse, null, null, null);
with as这种sql,这个方法这里报错
看官方语法是 as后面的变量名,确认sql没有写错吗? 是不是应该这样写:
WITH (SELECT 1) AS a SELECT * FROM a
这样解析是没有问题的。
https://clickhouse.com/docs/zh/sql-reference/statements/select/with
你个sql有问题,解析虽然不报错,查询报错,DBeaver都执行不了 你这种写法是将子查询结果只有一行的作为一个常量,我是需要将子查询的结果作为一个临时表
18:49:35.868 [http-nio-9012-exec-1] ERROR c.a.d.f.s.StatFilter - [mergeSql,150] - merge sql error, dbType clickhouse, druid-1.2.16, sql : WITH inData AS( SELECT COUNT(1) inCount, SUM(amount) inAmount FROM mv_trans_info_to_address WHERE to_address = ? AND
timestamp
BETWEEN ? AND ? ), outData AS( SELECT COUNT(1) outCount, SUM(amount) outAmount FROM mv_trans_info_owner_address WHERE owner_address = ? ANDtimestamp
BETWEEN ? AND ? ) SELECT * FROM inData, outData com.alibaba.druid.sql.parser.ParserException: not supported.pos 166, line 3, column 10, token ) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:615) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:101) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:163) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:134) at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:148)