我正在尝试通过查询来汇总一些数据。它是一个相当复杂的对复杂关系的 sql 查询,我想将其转换为 HQL。
我将使用数据关系的简化版本来简化讨论。
那么我怎么能把它翻译成 HQL 呢?在 HQL 中甚至可以查询查询吗?
例子:
假设我们有一个影评人在线评论电影,我们想要返回他评论的电影数量、他喜欢的电影数量和他讨厌的电影数量的总数。
表:
- 评论家
- 电影
- 评论(评论家和电影与 LoveFlag 之间的链接表,如果 LoveFlag 是假的,他讨厌这部电影)
SQL查询:
(这是一个虚构的场景,我正在研究的解决方案是用于设施管理。我在堆栈溢出时编写了这个查询,所以它很可能存在缺陷。)
选择criticSummary.id,计数(criticSummary.reviewId)作为totalReviews,SUM(criticSummary.isLoved)作为totalLoved,SUM(criticSummary.isHated)作为totalHated
从 (
SELECT DISTINCT critic.id AS id, review.id AS reviewId, review.isLoved AS isLoved, CASE WHEN review.isLoved = 1 THEN 0 ELSE 1 END AS isHated FROM [critic] critic INNER JOIN [review] review ON ( review.criticId = critic.id AND review.active = 1 ) WHERE critic.active = 1
) AS 评论家总结
GROUP BY 评论家Summary.id