Derby 或 HSQLDB 是不是支持跨模式连接的 Sybase 语法?

Posted

技术标签:

【中文标题】Derby 或 HSQLDB 是不是支持跨模式连接的 Sybase 语法?【英文标题】:Do Derby or HSQLDB support Sybase syntax for cross-schema joins?Derby 或 HSQLDB 是否支持跨模式连接的 Sybase 语法? 【发布时间】:2013-03-05 23:17:37 【问题描述】:

在 Sybase ASE 15 上,我有一组看起来像这样的数据库模式:

架构 S1:

CREATE TABLE T1 (T1KEY INT)

架构 S2:

CREATE TABLE T2 (T2KEY INT, T1FK INT)

T2 的 T1FK 基本上是 T1 的 T1KEY 列的 FK(不是由实际的数据库业务规则强制执行,但值匹配)。

在 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 查询语法?是否有任何替代产品支持此用例?

非常感谢!

【问题讨论】:

【参考方案1】:

HSQLDB 支持的语法是标准 SQL,使用单点。

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

由于标准 SQL 语法中从不出现双点,因此当您对 HSQLDB 运行查询时,您可以安全地将所有出现的双点替换为单点。

【讨论】:

Derby应该是一样的,因为它的SQL语法很标准。 谢谢 - 我认为我的胃灼热可能会减少到与 Sybase 不遵守单点 SQL 形式这一事实作斗争,所以我必须在单元测试时间和集成测试时间测试不同的 SQL 如果我想对 SQL 进行单元测试。那好吧。再次感谢! 万一以后有人偶然发现这个问题,我最终解决了这个问题:MyBatis 映射器被 maven 在 generate-test-resources Maven 构建阶段复制到 target/test-classes -resource-plugin 的复制资源目标。然后,在 process-test-resources 阶段,我使用 maven-replacer-plugin 将 A.. 语法的任何实例替换为 A。这让我只维护一组 MyBatis 映射器,它们可以在嵌入式和生产案例。

以上是关于Derby 或 HSQLDB 是不是支持跨模式连接的 Sybase 语法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将hsqldb数据库和tomcat协同工作?

将 Big Derby 嵌入数据库迁移到 HSQLDB 抛出 java.lang.OutOfMemoryError: Java heap space

Derby/JDBC 连接生命周期(或空闲超时)

在 DERBY 查询中省略模式

数据源 derby - 连接被拒绝

《数据分析-JiMuReport02》JiMuReport开发配置入门介绍