如何通过 HSQLDB 和 MySQL 之间的差异来处理 union/order?

Posted

技术标签:

【中文标题】如何通过 HSQLDB 和 MySQL 之间的差异来处理 union/order?【英文标题】:How to deal with union/order by differences between HSQLDB and MySQL? 【发布时间】:2012-10-15 12:12:39 【问题描述】:

我目前使用 hsqldb 进行测试,使用 mysql 进行生产。这种组合在我最近的每个项目中都非常有效,但是我遇到了 HSQLDB 的语法/方言与 MySQL 不同的情况,我不确定克服它的最佳策略是什么。

在mysql中,你可以这样写一个联合查询:

select ...
union
select ...
order by created_on desc
limit 20 offset 0

但是,在 HSQLDB 中,它抱怨 order by 子句有错误。

有什么方法可以编写查询,让两个数据库都喜欢语法吗?

【问题讨论】:

你试过用括号括住你的选择吗? 我试过了。它仍然抛出org.hsqldb.HsqlException: invalid ORDER BY expression 请报告完整的 SELECT 列,因为错误与使用的列有关。 【参考方案1】:

试试这个:

select * from (

select ...
union
select ...)a
order by a.created_on desc
limit 20 offset 0

【讨论】:

这会对性能产生负面影响吗?只是好奇 我不认为会有任何显着的性能差异..因为我们只是为结果集提供别名 我认为这会奏效。我将不得不重写我的java代码:(我使用的是Hibernate的原始sql语法,它有特殊的语法来获取p.*并将它放入一个对象中,但是使用你的建议,我不认为我可以再使用这个 Hibernate 映射快捷方式了。我想我只需要使用 JDBC 并手动进行映射。

以上是关于如何通过 HSQLDB 和 MySQL 之间的差异来处理 union/order?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如何在几秒钟内获得两个时间戳之间的差异

如何在 HSQLDB 和 C# .net 之间建立连接?

如何在当前使用 HSQLDB 的 Spring 和 Hibernate 后台使用 MySQL

HSQLDB 中的日期差异

如何获取 MySQL 上两个日期之间的差异天数?

如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?