H2递归调用不识别列
H2 recursive call not recognizing column
我有以下代码,但数据库显示它看不到列 n
。
我在使用真实数据库 tables 时遇到同样的问题。但是对于真正的 table 我什至没有为该列添加别名。
WITH RECURSIVE counter AS (
SELECT 1 as n
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter;
出现以下错误:
Error: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "N" not found; SQL statement:
WITH RECURSIVE counter AS (
SELECT 1 as n
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter [42122-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)
CTE 在 H2 中是实验性的,有不同的问题。实际上你在这里不需要它们。在 H2 中你可以使用
SELECT * FROM SYSTEM_RANGE(1, 10);
在 PostgreSQL 和 H2 中,您都可以使用特定于 PosgtreSQL 的
SELECT * FROM GENERATE_SERIES(1, 10);
如果您需要将列名更改为N
,请在函数后添加派生列列表T(N)
。
SELECT * FROM GENERATE_SERIES(1, 10) T(N);
但是,如果您仍想使用 CTE,请将列名添加到 WITH
子句中,并可选择从常量中删除别名,如果在这种情况下不需要的话:
WITH RECURSIVE counter(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter;
我有以下代码,但数据库显示它看不到列 n
。
我在使用真实数据库 tables 时遇到同样的问题。但是对于真正的 table 我什至没有为该列添加别名。
WITH RECURSIVE counter AS (
SELECT 1 as n
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter;
出现以下错误:
Error: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "N" not found; SQL statement:
WITH RECURSIVE counter AS (
SELECT 1 as n
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter [42122-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)
CTE 在 H2 中是实验性的,有不同的问题。实际上你在这里不需要它们。在 H2 中你可以使用
SELECT * FROM SYSTEM_RANGE(1, 10);
在 PostgreSQL 和 H2 中,您都可以使用特定于 PosgtreSQL 的
SELECT * FROM GENERATE_SERIES(1, 10);
如果您需要将列名更改为N
,请在函数后添加派生列列表T(N)
。
SELECT * FROM GENERATE_SERIES(1, 10) T(N);
但是,如果您仍想使用 CTE,请将列名添加到 WITH
子句中,并可选择从常量中删除别名,如果在这种情况下不需要的话:
WITH RECURSIVE counter(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM counter WHERE n < 10
)
SELECT * from counter;