如何通过 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?的主要内容,如果未能解决你的问题,请参考以下文章