2013-03-05 47 views
1

我有一組數據庫中的模式,看起來像這樣,基於Sybase ASE 15:Doby或HSQLDB是否支持用於跨模式聯接的Sybase語法?

模式S1:

CREATE TABLE T1 (T1KEY INT) 

模式S2:

CREATE TABLE T2 (T2KEY INT, T1FK INT) 

T2的T1FK基本上是一個FK到T1的T1KEY列(不是由實際的數據庫業務規則強制實施,但值匹配)。

在Sybase,這是法律執行在這些模式聯接像這樣:

SELECT a.T1KEY, b.T2KEY 
    FROM S1..T1 a 
    LEFT OUTER JOIN S2..T2 AS b ON (a.T1KEY = b.T1FK) 

我還沒有發現支持這種語法的嵌入式數據庫。 Derby和HSQLDB似乎都忽略了雙點語法,甚至當這種語法被替換爲例如S1.dbo.T1時,兩個DB都不成問題。我使用MyBatis 3.1.1來運行查詢,這在實際部署中針對ASE服務器可以很好地工作。

我希望在單元測試時能夠支持這樣的查詢,但我知道Sybase語法往往不受支持。我知道對於Oracle來說,HSQLDB支持一個標誌來支持與ORA特定語法的兼容性。是否有一些我缺少的語法標誌會使這些數據庫中的任何一個能夠像上面那樣處理Sybase查詢語法?有沒有其他支持這種用例的產品?

非常感謝!

回答

0

HSQLDB支持的語法是Standard SQL,它使用單個點。

SELECT a.T1KEY, b.T2KEY 
    FROM S1.T1 a 
    LEFT OUTER JOIN S2.T2 AS b ON (a.T1KEY = b.T1FK) 

由於雙點永遠不會發生在標準的SQL語法,你可以放心地當您對HSQLDB查詢替換單點雙點出現的所有。

+0

Derby應該是相同的,因爲它的SQL語法非常標準。 – 2013-03-06 14:49:29

+0

謝謝 - 我想我的胃灼熱可能會減少到克服Sybase不遵守單點SQL表單的事實,所以如果我想單元測試SQL,我將不得不在單元測試時間和集成測試時間測試不同的SQL 。好吧。再次感謝! – 2013-03-06 16:32:57

+0

如果任何人稍後出現這種情況,我最終解決了這個問題:MyBatis映射器被maven-resource-plugin的copy-resources複製到了generate-test-resources Maven構建階段的target/test-classes中目標。然後,在process-test-resources階段,我使用maven-replacer-plugin將A ..語法的任何實例替換爲A.這使我可以維護一組MyBatis映射器,這些映射器既可以嵌入生產案例。 – 2013-03-06 19:15:50

相關問題