【问题标题】:JPA unknown column alias in 'group statement'“组语句”中的 JPA 未知列别名
【发布时间】:2020-07-02 12:17:43
【问题描述】:

在 java SQL 上运行此查询时出现错误,但在 SQL 编辑器上测试时它可以正常工作

@Query(value = "SELECT l.loan, max(i.date) as dDate, tr.collecty, sum(i.expectedAmount) as amount,"
            + "(select CASE WHEN (br.stype = 'x') THEN br.idNumber ELSE br.np END as type from Bower br inner join Leds ld on br.id = ld.bowerId where ld.loan = :loan) as bId "
            + "FROM Loan l INNER JOIN Inst i ON l.loan = i.loan INNER JOIN TList tr ON l.loan = tr.loan WHERE l.loan = :loan GROUP BY l.loanId, tr.collecty, bId")

出现错误

原因:java.sql.SQLSyntaxErrorException: 'group statement' 中的未知列 'bId'

如何解决?

【问题讨论】:

  • @Eklavya 好吧,它的错字,在我的代码上是正确的

标签: java sql jpa


【解决方案1】:

group by 的执行顺序在查询中的 select 之前。因此,在您按 bId 分组时,选择查询尚未执行,它不会识别 bId 列或您在选择时指定的任何别名。

【讨论】:

    【解决方案2】:

    由于bId是派生列,不能使用同级列进行聚合。你需要上一层。下面的代码应该可以工作。不过,执行聚合的方式仍有改进空间。

    @Query(value = “SELECT loan, dDate, collecty, amount, bId FROM (SELECT l.loan, max(i.date) as dDate, tr.collecty, sum(i.expectedAmount) as amount,"
                + "(select CASE WHEN (br.stype = 'x') THEN br.idNumber ELSE br.np END as type from Bower br inner join Leds ld on br.id = ld.bowerId where ld.loan = :loan) as bId ) "
                + "FROM Loan l INNER JOIN Inst i ON l.loan = i.loan INNER JOIN TList tr ON l.loan = tr.loan WHERE l.loan = :loan ) GROUP BY loan, dDate, collecty, amount, bId”)
    

    【讨论】:

    • 我明白了,org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:(靠近第 1 行。@ShantanuKher
    • 如果我添加“SELECT NEW com..loan.service.dto.Response(loan, dDate, collecty, amount, bId)FROM (SELECT l.loan, max(i.date) as dDate , tr.collecty, sum(i.expectedAmount) as amount," + "(select CASE WHEN (br.stype = 'x') THEN br.idNumber ELSE br.np END as type from Bower br inner join Leds ld on br .id = ld.bowerId where ld.loan = :loan) as bId" + "FROM Loan l INNER JOIN Inst i ON l.loan = i.loan INNER JOIN TList tr ON l.loan = tr.loan WHERE l.loan = :loan ) GROUP BY loan, dDate, collecty, amount, bId”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多