H2数据库如何为VALUES子句定义隐式列名 SQL语法问题
报错原因
H2的SQL语法规范对VALUES行值构造器生成的派生表的别名定义有明确要求:当需要同时指定表别名和自定义列名时,必须在表别名前显式添加AS关键字。而DB2支持省略该关键字,因此直接迁移的语句会触发42000语法错误。
H2环境可执行的正确写法
select * from (values(0),(1)) AS ones(n), (values(0),(1)) AS tens(n)
多数据库兼容写法
如果需要语句同时适配DB2、H2等多种数据库,可以改用通用的子查询写法,避免不同数据库对VALUES派生表别名的语法差异:
select * from (select 0 n union all select 1) ones, (select 0 n union all select 1) tens
内容的提问来源于stack exchange,提问作者Shenghao Wu
相关产品推荐
相关产品推荐

