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

我有这样的查询

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

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

【问题讨论】:

    标签: java hibernate informix hsqldb


    【解决方案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。
    猜你喜欢
    • 2020-09-14
    • 2014-11-26
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多