H2 'AS' 列别名错误

Posted

技术标签:

【中文标题】H2 \'AS\' 列别名错误【英文标题】:H2 'AS' Column alias errorH2 'AS' 列别名错误 【发布时间】:2015-08-03 20:17:07 【问题描述】:

这里是 H2 表架构:

drop table IF EXISTS

CREATE TABLE CAR_SPEED
(
  ACC_RATE                      VARCHAR2(20) NOT NULL,
  SPEED_GROUP                   VARCHAR2(30) NOT NULL,
  MAX_SPEED                     NUMBER,
  MIN_SPEED                     NUMBER       
);

我尝试执行的查询语句是这样的:

SELECT distinct MAX_SPEED as limit
FROM CAR_SPEED  
WHERE ACC_RATE ='Full' 
AND SPEED_GROUP = 'CS';

当我在 oracle 中运行这个完全相同的查询时,我没有任何问题,但是当我在 h2 上运行时,我得到了以下错误

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT DISTINCT MAX_SPEED AS LIMIT[*]
FROM CAR_SPEED 
WHERE CAR_SPEED 
AND SPEED_GROUP = 'CS' "; expected "identifier"; SQL statement:
SELECT DISTINCT MAX_SPEED AS LIMIT[*]
FROM CAR_SPEED 
WHERE CAR_SPEED 
AND SPEED_GROUP = 'CS' [42001-160]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)

如果我从查询中删除“AS LIMIT”,它会运行良好,但是当我保留它时,它会给我这个语法错误。有人知道为什么吗?

【问题讨论】:

【参考方案1】:

limit 是一个reserved word。使用另一个或用双引号将其转义。

【讨论】:

oracle 中保留?还是h2?是 h2 给了我问题 它在大多数数据库引擎中保留,在 H2 和 Oracle 中也是如此。

以上是关于H2 'AS' 列别名错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle字段别名加as与不加的区别

为啥没有使用关键字“AS”设置列别名?

在 H2 上运行查询时未找到列“name_c”错误

sql语句写法——as后的别名中有括号怎么处理(Oracle)

H2 抱怨语法错误,MySQL 接受它 - 但是,错误的语法给出了正确的结果:列 ... 必须在 GROUP BY 列表中;

在查询中使用别名时出现“#1054 - 未知列”错误?