DB2查询中的SqlSyntaxErrorException

时间:2016-08-08 15:46:24

标签: sql db2

我正在尝试执行以下db2查询,但是我收到此错误:

  

SqlSyntaxErrorException:DB2 SQL错误:SQLCODE = -119,SQLSTATE = 42803,SQLERRMC = ENTITLEMENT

查询是:

SELECT *
FROM reclaimbalance rb
    ,user_benefit_accrued_period ubap
WHERE rb.user_id = ubap.user_id
    AND rb.component_id = ubap.PAY_HEAD_ID
    AND ubap.CUSTOMER_ID = 281
    AND rb.year = '2016-2017'
    AND ubap.STATUS = 1
GROUP BY ubap.user_id
    ,ubap.PAY_HEAD_ID
HAVING sum(ubap.STD_BALANCE_ADDED_IN_PERIOD) != rb.ENTITLEMENT

2 个答案:

答案 0 :(得分:0)

一个问题是SELECT *。不过,我希望错误与通用语法错误略有不同。

此外,您应该学习使用显式JOIN语法。而且,您的HAVING子句有一个非聚合列。

我认为你想要这样的东西:

SELECT ubap.user_id, ubap.PAY_HEAD_ID, rb.ENTITLEMENT,
       sum(ubap.STD_BALANCE_ADDED_IN_PERIOD)
FROM reclaimbalance rb JOIN
     user_benefit_accrued_period ubap
      ON rb.user_id = ubap.user_id AND rb.component_id = ubap.PAY_HEAD_ID
WHERE ubap.CUSTOMER_ID = 281 AND rb.year = '2016-2017' AND ubap.STATUS = 1
GROUP BY ubap.user_id, ubap.PAY_HEAD_ID, rb.ENTITLEMENT
HAVING sum(ubap.STD_BALANCE_ADDED_IN_PERIOD) <> rb.ENTITLEMENT;

答案 1 :(得分:0)

sqlcode = -119诊断出的问题是列&#34; ENTITLEMENT&#34;在HAVING子句中指定的既不是在聚合函数中的HAVING子句上编码,也不是列&#34; ENTITLEMENT&#34;在GROUP BY子句中指定。
恢复是通过删除对列的非聚合引用&#34; ENTITLEMENT&#34;从HAVING子句中,更改对列的引用&#34; ENTITLEMENT&#34;在聚合函数内部,或添加列&#34; ENTITLEMENT&#34;到GROUP BY子句。

但请注意,尽管有效恢复,但效果可能不是必需的。即使在根据上面提到的任何一个可能的恢复操作解决了sqlcode = -119问题之后,几乎可以肯定下一个问题是针对sqlcode - = - 122建议某些列或非SELECT-list中包含的-aggregate \ non [effective-]常量表达式也不在GROUP BY子句中命名。 FWiW:尽管如此,SELECT *可以与GROUP BY兼容,但只是一个特例;如规则所述,必须在GROUP BY上指定所选列[按星号隐式选择]。