如何在 Hsql 中执行外连接

Posted

技术标签:

【中文标题】如何在 Hsql 中执行外连接【英文标题】:How to perform outer join in Hsql 【发布时间】:2011-12-08 19:09:49 【问题描述】:

我有这样的查询

SELECT * from table1 t1,table2 t2, OUTER table3 t3

这在 Informix 数据库中有效,但是当我将它用作 Hsql 时,它无法找到它 仅“OUTER”关键字...如何在Hibernate中进行外部联接?

【问题讨论】:

【参考方案1】:

HSQLDB 支持标准 SQL 语法,这与您的 Informix 语法查询不同。这种语法的一些例子:

SELECT * from table1 t1 NATURAL JOIN table2 t2 NATURAL LEFT OUTER JOIN table3 t3

SELECT * from table1 t1 JOIN table2 t2 ON (T1.X = T2.Y) LEFT OUTER JOIN table3 t3 ON (T2.Z = T3.X)

您应该使您的查询适应标准语法。

您在 cmets 中报告的查询以这种方式转换为标准 SQL:

SELECT distinct sd.student_id, ss.sports_id, sf.fee_desc FROM STUDENTDETAILS sd
JOIN STUDENTSPORTS ss ON ss.sports_id = sd.sports_id LEFT OUTER JOIN STUDENTFEES sf 
ON ??? 

注意,问号需要一个条件。例如 STUDENTSFEES 中的 id 需要与 STUDENTSSPORTS 中的 id 相同。 sf.some_id = ss.some_id

【讨论】:

我在 Informix 语法查询中的查询是 select sd.student_name,ss.student_sports,sf.student_fees from STUDENTDETAILS sd, STUDENTSPORTS ss,OUTER STUDENTFEES sf.... 我将如何写这个在 HSQLDB 中? 你能报告完整的查询吗?您报告的内容没有意义。 SELECT distinct sd.student_id, ss.sports_id, sf.fee_desc FROM STUDENTDETAILS sd, STUDENTSPORTS ss, OUTER STUDENTFEES sf WHERE ss.sports_id = sd.sports_id【参考方案2】:

假设您的实体和映射文件设置正确,这将是一个非常简单的“左外连接 entity.field 作为别名”

来自 HQL 网站

from Cat as cat
inner join cat.mate as mate
left outer join cat.kittens as kitten

HQL website

在您将表格作为实体的情况下,它类似于 从 table1 作为 tab1 内连接 tab.table2column 作为 tab2 左外连接 tab.table3 列为 tab3

【讨论】:

你好布赖恩,我参考了文档并从表中创建了这样的查询作为表左外部连接表。列作为列,但我收到错误表不在架构中......跨度> 是您在解决方案中使用正确的休眠 xml 映射文件查询的对象吗?从您所写的内容看来,您至少需要两个对应于 table1 和 table2 的类以及两个 xml 映射文件,其中第一个具有第二个的包(或可能设置)作为其参数之一。我总是把包和套装弄糊涂,但要让它发挥作用,此时这并不重要。【参考方案3】:

HQL 和 SQL 是两种不同的语言。 SQL 使用表和列,HQL 使用实体、字段和实体之间的关联。

阅读Hibernate reference documentation。

【讨论】:

我知道这是两种不同的语言。因为我使用的是 HQL,因为我使用的是命名本机查询,并且我将结果集填充到 pojo 类字段,我只是想知道 wot HQL查询将等同于我提到的 SQL 查询 HQL 适用于实体。向我们展示您的实体。 BTW,这个外层的SQL语法我不知道,但是好像SQL查询里根本没有join。

以上是关于如何在 Hsql 中执行外连接的主要内容,如果未能解决你的问题,请参考以下文章

如何修复身份始终返回 0 的 HSQL DataSource + TxM

如何在应用程序外部连接/查询 HSQL 数据库?

如何在数组数据类型的元素上添加外键约束

如何在 Linq 中执行左外连接? [复制]

如何对数组数据类型的元素添加外键约束

如何在熊猫数据框中执行左外连接?