【问题标题】:SQL 3 relationships on 1 query1 个查询上的 SQL 3 关系
【发布时间】:2020-03-03 19:15:39
【问题描述】:

我试图从不同的实体获取 3 个表,当我使用 where eia.carreraHorizo​​ntal.kid = eig.carreraHorizo​​ntal.kid AND eig.carreraHorizo​​ntal.kid = hch.carreraHorizo​​ntal 时,它一直说我有错误。孩子,它返回了很多重复的结果。 这是我的代码:

        List<EvaluacionIndividualAnualYGdp> lista;
        String jpql = "select DISTINCT new es.valencia.gp.sbch.entity.EvaluacionIndividualAnualYGdp(eia, eig, hch)" 
                + " from EvaluacionIndividualAnual eia, EvaluacionIndividualGdp eig, HistoricoCarreraHorizontal hch"
                + " where eia.carreraHorizontal.kid = eig.carreraHorizontal.kid = eig.carreraHorizontal.kid"
                + " ";
                //GROUP BY eia ORDER BY eia.carreraHorizontal.empleado.apellido1 ASC, eia
        TypedQuery<EvaluacionIndividualAnualYGdp> query = em.createQuery(jpql, EvaluacionIndividualAnualYGdp.class);
        lista = query.getResultList();
        return lista;
    } ``` 

The error:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: = near line 1, column 302 [select DISTINCT new es.valencia.gp.sbch.entity.EvaluacionIndividualAnualYGdp(eia, eig, hch) from es.valencia.gp.sbch.entity.EvaluacionIndividualAnual eia, es.valencia.gp.sbch.entity.EvaluacionIndividualGdp eig, es.valencia.gp.sbch.entity.HistoricoCarreraHorizontal hch where eia.carreraHorizontal.kid = eig.carreraHorizontal.kid = eig.carreraHorizontal.kid ]

But i'm getting an exception. How i can get those values? Sorry for the question but i'm new.

【问题讨论】:

    标签: mysql sql spring hibernate tomcat


    【解决方案1】:

    你应该删除最后一个 eig.carreraHorizo​​ntal.kid:

    eia.carreraHorizontal.kid = eig.carreraHorizontal.kid = eig.carreraHorizontal.kid
    

    应该是

    eia.carreraHorizontal.kid = eig.carreraHorizontal.kid
    

    比较 a = b = b 不起作用。大概应该是a=b and b=c

        eia.carreraHorizontal.kid = eig.carreraHorizontal.kid 
    and eig.carreraHorizontal.kid = hch.carreraHorizontal.kid
    

    而且我不知道 distinct 之后的“new”是否也是错误。

    【讨论】:

      【解决方案2】:

      你有(至少)一个错误的语法

         where eia.carreraHorizontal.kid = eig.carreraHorizontal.kid = eig.carreraHorizontal.kid 
      

      你应该使用

          where eia.carreraHorizontal.kid = eig.carreraHorizontal.kid 
          AND  eig.carreraHorizontal.kid =  hch.carreraHorizontal.kid
      

      您可以避免基于位置的旧连接语法,并使用基于显式连接的语法

         select DISTINCT
         es.valencia.gp.sbch.entity.EvaluacionIndividualAnualYGdp(eia, eig, hch) 
         from EvaluacionIndividualAnual eia
         INNER JOIN EvaluacionIndividualGdp eig ON eia.carreraHorizontal.kid = eig.carreraHorizontal.kid  
         INNER JOIN HistoricoCarreraHorizontal hch  ON  eig.carreraHorizontal.kid =  hch.carreraHorizontal.kid
      

      并不清楚new es.valencia.gp.sbch.entity.EvaluacionIndividualAnualYGdp(eia, eig, hch) 中的“new”是什么意思,SQL 中没有 new 运算符。

      【讨论】:

        猜你喜欢
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多