如何在 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 中执行外连接的主要内容,如果未能解决你的问题,请参考以下文章