SQL / JPQL从具有层次结构的表中选择,计数和求和不同的结果

时间:2015-08-07 16:08:27

标签: mysql sql-server jpql

我正在处理两个表usersaccounts,它们与UserAccount java实体相关联。 user条目采用分层结构:user - >经理 - >管理 用户可以拥有帐户,管理员和管理员不能,层次结构由supervisor_id建立,在这种情况下:user.supervisor_id = manager.id,manager.supervisor_id = admin.id。每个用户条目还有一个显示其角色的role列,即user.role ='user',manager.role ='manager',admin.role ='admin'

帐户与用户关系由以下人员建立: account.user_id = user.id,每个用户可以拥有多个帐户。 accounts表格还有一个balance列。

以下是我要做的事情,从管理方面来说,我想查看用户帐户的数量,以及帐户余额总数作为一个简单的统计数据。

我使用的JPQL查询是这样的:

SELECT COUNT(acct.id), COALESCE(SUM(acct.balance),0)
FROM Account acct, User user, User manager, User admin
WHERE user.supervisor_id = manager.id AND manager.supervisor_id = admin.id
AND admin.id = :adminId AND acct.user_id = user.id

:adminId是admin的id作为参数。此查询似乎从重复结果中检索数据,并且添加“AND”条件(如“user.role ='user'”)似乎不起作用。导致此查询返回重复结果的原因是什么以及如何解决?

感谢。

编辑: 我发现了一些错误:我忘了一些东西,一个用户可以直接在admin下,这就是为什么我将查询更改为:

SELECT COUNT(acct.id), COALESCE(SUM(acct.balance),0)
FROM Account acct, User user, User manager, User admin
WHERE (user.supervisor_id = manager.id AND manager.supervisor_id = admin.id
OR user.supervisor_id = admin.id)
AND admin.id = :adminId AND acct.user_id = user.id

问题仍然存在。

0 个答案:

没有答案