mysql - 在 FROM 中使用子查询进行 HQL

标签 mysql nhibernate 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

需要选择器表,因为集合可以有多个具有相同 sel.PVR_FK、sel.TCD_FK 的记录,在这种情况下 MAX(...)表达式将选择更大的值,但我需要使用更大的值 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

关于mysql - 在 FROM 中使用子查询进行 HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880338/

相关文章:

mysql perl 选择连接和更新表

c# - 从 Nhibernate 3.3 获取 SqlConnection

NHibernate QueryOver 和 JoinQueryOver 选择所有列

mysql - 如何使用 join 和 max 将 sql 转换为 hql

java - 使用 set 子句中的子选择更新 Hibernate HQL

mysql - 即使创建用户后也无法远程连接到 mySQL

mysql - 具有现有数据库的 Mariadb 多阶段容器

java - Hibernate 返回整数值

javascript - 在 JavaScript 中处理 PHP 数组变量并能够使用索引获取这些值的最有效和正确的方法是什么

c# - nHibernate QueryOver 以编程方式构建?