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 不能在派生表中进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

继承和派生

是否可以使用“Array.IndexOf”或其他代码派生数据对数据库中的 EF 查询结果进行排序?

在哈希表中使用派生类的搜索函数

使用存储过程将数据插入从其他表派生的表中

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

sqlserver 创建视图失败,原因:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效