我有以下查询,直接针对DB2运行时效果很好:
String sql =
"select slutt_dato + 1 day as tDato from klv80201 " +
"union " +
"select fra_dato as tDato from klv12101 where avtalenr = :avtalenr and kundenr = :kundenr " +
"union " +
"select fra_dato as tDato from klv12401 where avtalenr = :avtalenr and kundenr = :kundenr and MEDLEMSTATU < '32' " +
"order by tDato desc fetch first 1 rows only;";
但是当我使用以下配置将H2作为数据库进行测试时:
jdbc:h2:mem:play;MODE=DB2;LOCK_TIMEOUT=10000;LOCK_MODE=0
我收到以下错误消息:
org.h2.jdbc.JdbcSQLException:找不到列“SLUTT_DATO”; SQL 声明:从klv80201 union选择slutt_dato + 1天作为tDato 从klv12101中选择fra_dato作为tDato,其中avtalenr =?和kundenr =? union选择fra_dato作为来自klv12401的tDato,其中avtalenr =?和kundenr =?和MEDLEMSTATU&lt; '32'由tDato desc首先获取 仅限1行; [42122-149]
如果我删除“+1天”,则查询在H2中运行良好。来自H2 JDBC驱动程序的错误消息是错误的,列“SLUTT_DATO”确实存在并且在删除“+1天”时效果很好。
有什么好的建议为什么H2会像它一样?这是一个错误还是我误解了什么?
提前致谢
答案 0 :(得分:0)
H2不理解+ 1 day
并且在这里感到困惑。然而,这将有效:
"select slutt_dato + 1 as tDato from klv80201 "
但是我担心这对IBM DB2不起作用......我认为这个问题并不适用于IBM DB2和H2。