我有以下查詢(從傳統的繼承)類似查詢在PostgreSQL中可用,但HSQL失敗。我該如何解決它?
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的分貝,但隨後的查詢失敗,
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不喜歡內的訂單加入。
- 此命令不正確的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設置適用於所有其他的測試,所以它的工作和執行。
正如我想......我會嘗試更新HSQLDB然後。 – 2010-09-18 06:44:28
終於有時間嘗試升級。直接使用2.0.0而不是1.8.0.10。就我的代碼而言,只有'org.hsqldb.ServerConstants' - >'org.hsqldb.server.ServerConstants'。不幸的是,現在查詢失敗,並且在「派生表中重複列名」。這是由於Hibernate 3.4.0 GA嗎? – 2010-10-18 13:21:38
我沒有看到你最後的評論。問題是「SELECT \ *,article_count as articlecount FROM tag」使用「SELECT tag。*,article_count as articlecount FROM tag」。 「SELECT *」不能添加額外的元素。 – fredt 2010-10-28 19:38:16