HSQLDB 1.8 不能在派生表中进行排序?
Posted
技术标签:
【中文标题】HSQLDB 1.8 不能在派生表中进行排序?【英文标题】:HSQLDB 1.8 not able to do order by in derived tables? 【发布时间】:2010-07-12 18:07:30 【问题描述】:我有一个查询,我在内部连接的派生表中执行 Order by。
例如:
SELECT g.*
FROM (
SELECT ...
FROM ...
ORDER BY alias.some_column
LIMIT 0, 20
) as g
... # other joins
这在 mysql 中运行良好,但在 HSQLDB 中失败。我在这里下订单的原因是 mysql 比将 ORDER BY 放在外部查询中要快得多。这是纯粹的性能胜利。但是,HSQLDB 正在抱怨。
这是个例外:
WARN JDBCExceptionReporter:100 - SQL Error: -70, SQLState: 37000
ERROR JDBCExceptionReporter:101 - Cannot be in ORDER BY clause in statement [SELECT g.* FROM gallery g LEFT OUTER JOIN preview p ON p.id = g.preview_id INNER JOIN ( SELECT g.id, g.date_created FROM gallery g WHERE g.published = true ORDER BY g.date_created DESC LIMIT 0, 20 ) as g_ids on g_ids.id = g.id ]
这是一个大问题,因为我的测试使用 HSQLDB,但生产系统是 MySQL。我可以将这些测试作为“异常”移动并针对 mysql 运行,但它要慢得多……而且为了让测试通过而使生产系统变慢会破坏测试的意义。
我可以重组我的测试以使用 mysql 进行一些测试,而不是一揽子使用 hsqldb 进行所有测试……这对我来说是一个很大的测试框架变化。那么有没有办法让 hsqldb 玩得很好,还是我必须改进我的测试框架?
谢谢!
【问题讨论】:
仅供参考:SQL 代表“结构化查询语言”,而不是“标准查询语言”。可移植 SQL 是我们努力的目标,但在查询经过测试之前,我们永远无法保证。 【参考方案1】:我想说改进您的测试框架。在一个平台上编写并在另一个平台上部署总是很危险的。
【讨论】:
我升级到 2.0 似乎已经解决了这个问题。如果我需要针对 mysql 运行该套件,我可以将其切换到 1 个文件中并运行该套件。对 mysql 一遍又一遍地运行测试很烦人。【参考方案2】:除了更改测试框架之外,一种选择是同时考虑使用更新版本的 HSQLDB,或者使用另一个 Java 数据库。有 Apache Derby(遗憾的是不支持 LIMIT)和 H2 数据库引擎。
【讨论】:
以上是关于HSQLDB 1.8 不能在派生表中进行排序?的主要内容,如果未能解决你的问题,请参考以下文章