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;