У меня есть запрос, в котором я выполняю заказ внутри производной таблицы, к которой внутреннее соединение присоединено.
Ex:
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 играть хорошо или мне нужно улучшить мою среду тестирования?
Спасибо!