我正在尝试执行以下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
答案 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上指定所选列[按星号隐式选择]。