我有一個查詢,我正在做內部正在被內部加入的派生表內的訂單。HSQLDB 1.8無法在派生表中進行排序?
例:
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。我可以將這些測試作爲「Exceptions」移動,並針對mysql運行,但速度要慢得多......並且使生產系統變得更慢,只是爲了讓測試通過而失敗測試點。
我可以重構我的測試,以使用mysql進行一些測試,而不是一攬子使用hsqldb的一切......這對我來說是一個很大的測試框架變化。那麼有沒有辦法讓hsqldb發揮出色呢,還是我必須改進我的測試框架?
謝謝!
僅供參考:SQL代表「結構化查詢語言」,而不是「標準查詢語言」。可移植的SQL是我們追求的目標,但是直到查詢被測試之後纔會有保證。 – 2010-07-12 18:21:31