在 FROM 中为 HQL 使用子查询
Using subquery in FROM for HQL
我有以下 SQL 正在做我想做的事(简化):
SELECT tcd.Name, MAX(if(tcd.Name = 'Some Name', tcr.Value, NULL)) as 'Value'
FROM TestCaseData tcd, TestCaseDataResult tcr, PVRTable pvr,
(select MAX(sel.PK) as PK from TestCaseDataResult sel GROUP BY sel.PVR_FK, sel.TCD_FK) selector
WHERE tcr.PK = selector.PK AND tcr.TCD_FK = tcd.PK AND tcr.PVR_PK = pvr.PK
GROUP BY pvr.PK
ORDER BY pvr.PK
选择器 table 是必需的,因为集合可以有多个具有相同 sel.PVR_FK, sel.TCD_FK
的记录,在这种情况下 MAX(...)
表达式将 select 更大的值,但我需要用更大的值 PK
代替(最后一个值)
我想要 HQL 而不是 SQL。出于显而易见的原因,我试图避免在代码中使用原始 SQL。
看起来 HQL 不支持 FROM 中的子查询。我觉得我可以重写这个,这样它就可以在没有子查询但有自连接的情况下工作,但我正在努力寻找正确的解决方案。
我也很担心性能,所以我不想在SELECT中使用子查询,因为效率低下。
我相信你可以试试这个
SELECT tcd.Name, MAX(if(tcd.Name = 'Some Name', tcr.Value, NULL)) as 'Value')
FROM TestCaseData tcd, TestCaseDataResult tcr, PVRTable pvr
WHERE
tcr.PK IN(select MAX(PK) from TestCaseDataResult GROUP BY PVR_FK, TCD_FK)
AND tcr.TCD_FK = tcd.PK
AND tcr.PVR_PK = pvr.PK
GROUP BY pvr.PK
ORDER BY pvr.PK
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries
我有以下 SQL 正在做我想做的事(简化):
SELECT tcd.Name, MAX(if(tcd.Name = 'Some Name', tcr.Value, NULL)) as 'Value'
FROM TestCaseData tcd, TestCaseDataResult tcr, PVRTable pvr,
(select MAX(sel.PK) as PK from TestCaseDataResult sel GROUP BY sel.PVR_FK, sel.TCD_FK) selector
WHERE tcr.PK = selector.PK AND tcr.TCD_FK = tcd.PK AND tcr.PVR_PK = pvr.PK
GROUP BY pvr.PK
ORDER BY pvr.PK
选择器 table 是必需的,因为集合可以有多个具有相同 sel.PVR_FK, sel.TCD_FK
的记录,在这种情况下 MAX(...)
表达式将 select 更大的值,但我需要用更大的值 PK
代替(最后一个值)
我想要 HQL 而不是 SQL。出于显而易见的原因,我试图避免在代码中使用原始 SQL。
看起来 HQL 不支持 FROM 中的子查询。我觉得我可以重写这个,这样它就可以在没有子查询但有自连接的情况下工作,但我正在努力寻找正确的解决方案。
我也很担心性能,所以我不想在SELECT中使用子查询,因为效率低下。
我相信你可以试试这个
SELECT tcd.Name, MAX(if(tcd.Name = 'Some Name', tcr.Value, NULL)) as 'Value')
FROM TestCaseData tcd, TestCaseDataResult tcr, PVRTable pvr
WHERE
tcr.PK IN(select MAX(PK) from TestCaseDataResult GROUP BY PVR_FK, TCD_FK)
AND tcr.TCD_FK = tcd.PK
AND tcr.PVR_PK = pvr.PK
GROUP BY pvr.PK
ORDER BY pvr.PK
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries