【发布时间】:2011-12-08 19:09:49
【问题描述】:
我有这样的查询
SELECT * from table1 t1,table2 t2, OUTER table3 t3
这在 Informix 数据库中有效,但是当我将它用作 Hsql 时,它无法找到它 仅“OUTER”关键字...如何在Hibernate中进行外部联接?
【问题讨论】:
标签: java hibernate informix hsqldb
我有这样的查询
SELECT * from table1 t1,table2 t2, OUTER table3 t3
这在 Informix 数据库中有效,但是当我将它用作 Hsql 时,它无法找到它 仅“OUTER”关键字...如何在Hibernate中进行外部联接?
【问题讨论】:
标签: java hibernate informix hsqldb
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
【讨论】:
假设您的实体和映射文件设置正确,这将是一个非常简单的“左外连接 entity.field 作为别名”
来自 HQL 网站
from Cat as cat
inner join cat.mate as mate
left outer join cat.kittens as kitten
在您将表格作为实体的情况下,它类似于 从 table1 作为 tab1 内连接 tab.table2column 作为 tab2 左外连接 tab.table3 列为 tab3
【讨论】:
HQL 和 SQL 是两种不同的语言。 SQL 使用表和列,HQL 使用实体、字段和实体之间的关联。
【讨论】: