[英]QueryDSL selecting values with alias from Sub Query
我有两个实体如下
Parent {
String parentID;
String parentName;
...
}
——
Child{
String parentID;
String childID;
Integer height;
....
}
它是父母和孩子之间的一对多关系。
我的意图是拥有以下 SQL。
SELECT p.parentID, p.parentName, c.childrenHeightRange
FROM
Parent p
INNER JOIN
(
SELECT parentID, (CASE WHEN (min(height) = max(height)) THEN cast(min(height) as varchar) ELSE cast(min(height) as varchar) + ' - ' + cast(max(height) as varchar) END) as childrenHeightRange
FROM Child GROUP BY parentID) as c
ON (p.parentID = c.parentID)
对于上述查询,我为 childHeightRange 使用了 CaseBuilder,如下所示
JPASubQuery subQuery = new JPASubQuery().from(child).groupBy(child.parentID);
Expression<String> heightCaseExpression = new CaseBuilder()
.when(child.height.min().eq(child.height.max()))
.then(child.height.min().stringValue())
.otherwise(child.height.min().stringValue() +"-"+child.height.max().stringValue())
.as("childrenHeightRange");
然后是大问题..
我有
query.from(parent).innerjoin(subquery.list(child.parentID,heightCaseExpression )).on(parent.parentID.eq(child.parentID))
.list(parent.parentID,parent.parentName, ............);
我如何从子查询中引用 childrenHeightRange?
请帮忙。
谢谢
在 Querydsl JPA 中,您只能在 where 部分使用子查询,因此您需要重新构建查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.