У меня следующий запрос (унаследованный от унаследованного), аналогичный
SELECT bla FROM table
WHERE
some.id IN (
SELECT id FROM (
SELECT some FROM tag WHERE bla
UNION
SELECT some FROM dossierinfo WHERE bla
ORDER BY tag LIMIT :limit OFFSET :offset
) AS aggregated
WHERE dossier_type = 'auto'
)
)
Полный SQL находится внизу. Проблема в том, что он прекрасно работает в PostgreSQL 8.2.x. Для тестирования я добавил встроенный HSQL 1.8.x db, но тогда запрос завершается неудачно с
07 Sep 2010 13:55:11.914 [WARN] [main] [org.hibernate.util.JDBCExceptionReporter] - SQL Error: -11, SQLState: 37000
07 Sep 2010 13:55:11.914 [ERROR] [main] [org.hibernate.util.JDBCExceptionReporter] - Unexpected token ORDER, requires ) in statement [...]
Итак, я понял, что HSQL не нравится ORDER во внутреннем соединении.
- Не является ли этот порядок правильным SQL?
- Стоит ли обновлять HSQL до 2.0? Это поддержит заказ? Я быстро попробовал, но у меня были некоторые проблемы.
- Переписать запрос нельзя, я просто хотел добавить тест для этого.
Полный запрос:
SELECT *, article_count as articlecount FROM tag
WHERE
tag.id IN (
SELECT id FROM (
SELECT tag.tag AS tag, tag.id as id, tag.article_count as articleCount, 'auto' AS dossier_type FROM tag
WHERE tag.tag_count >= :minimumTagCount AND tag.article_count >= :minimumArticleCount AND
LENGTH(tag.tag) >= :minimumTagLength AND
tag.tag NOT IN (SELECT dossierinfo.name FROM dossierinfo) AND tag.is_stopword = :stopword
UNION
SELECT dossierinfo.name AS tag, dossierinfo.id AS id, dossierinfo.article_count as articleCount,
'manual' AS dossier_type FROM dossierinfo
WHERE dossierinfo.article_count >= :minimumArticleCount
ORDER BY tag LIMIT :limit OFFSET :offset
) AS aggregated
WHERE dossier_type = 'auto'
)
)
PS: Моя настройка HSQL работает для всех остальных тестов, поэтому она работает и выполняется.