如何解决带内部联接的select子查询的问题
本地查询:
SELECT t0.ID,t0.COMMENTS,t0.DATEIN,t0.GROUPNAME,t0.MEMBERID,t0.RECORDDATE,t0.GROUPTYPE,t1.ID,t1.COMMENTS,t1.DATEIN,t1.DATEOFFIN,t1.DATEOFFOUT,t1.DATEOUT,t1.GIVINGMEMBERID,t1.GIVINGH,t1.TEAMSUBGROUPID,t1.HOURS,t1.MEMBERID,t1.RECORDDATE,t1.STATUS,(SELECT COALESCE (SUM (t2.HOURS),?)
FROM C##ERA.TEAMSUBGROUP t7,C##ERA.MEMBERHASTEAM t6,C##ERA.TIMESHAREDETAILS t5,C##ERA.PROCEsspERIOD t4,C##ERA.FPURGE t3,C##ERA.TIMESHAREDETAILS t2
WHERE ( ((t5.FPURGEID = t3.ID) AND (t6.TEAMSUBGROUPID = t7.ID))
AND ( ( (t3.PERIODID = t4.FIPERIODID)
AND (t5.MEMBERID = t6.MEMBERID))
AND (t3.TEAMSUBGROUPID = t7.MEMBERID)))),CASE WHEN ((t1.STATUS = ?) OR (t1.STATUS = ?)) THEN ? ELSE ? END,(SELECT COALESCE (SUM (t8.HOURS),?)
FROM C##ERA.HOURS t8
WHERE (t8.MEMBERHASTEAMID = t1.ID)),(SELECT COALESCE (SUM (t9.HOURS),?)
FROM C##ERA.HOURS t9
WHERE (t9.HOURSOFMEMBERHASTEAMID = t1.ID)),CASE WHEN (t0.GROUPTYPE > ?) THEN ? ELSE ? END,CASE WHEN (t1.STATUS = ?) THEN ? ELSE ? END,(SELECT COALESCE (COUNT (t10.ID),?)
FROM C##ERA.TEAMSUBGROUP t11,C##ERA.MEMBERHASTEAM t10
WHERE ( ( ((t10.TEAMSUBGROUPID = ?) AND (t11.GROUPTYPE = ?))
AND ( ((t10.DATEIN >= ?) AND (t10.DATEIN <= ?))
AND ((t10.DATEOUT >= ?) AND (t10.DATEOUT <= ?))))
AND (t10.TEAMSUBGROUPID = t11.ID)))
FROM C##ERA.TEAMSUBGROUP t0,C##ERA.MEMBERHASTEAM t1
WHERE ( ( (t1.TEAMSUBGROUPID = ?)
AND ( ((t1.DATEIN >= ?) AND (t1.DATEIN <= ?))
AND ((t1.DATEOUT >= ?) AND (t1.DATEOUT <= ?))))
AND (t1.TEAMSUBGROUPID = t0.ID))
ORDER BY t1.DATEOUT
jpql查询:
SELECT tg,g,(select COALESCE(sum(ts.hours),0) FROM TimesharedetailsEntity ts
INNER JOIN FpurgeEntity fpurge ON ts.fpurgeid = fpurge.id
INNER JOIN ProcessperiodEntity pp ON fpurge.periodid = pp.fiperiodid
AND ts.memberid = g.memberid
and fpurge.teamsubgroupid = tg.leader ) as kalypsi,(CASE WHEN (g.status= 1 OR g.status = 2) THEN 1 ELSE 0 END) as activeteam,(SELECT COALESCE(sum(hours.hours),0) FROM HoursEntity hours WHERE hours.teamid = g.id ) as wres,(SELECT COALESCE(sum(hoursadeia.hours),0) FROM HoursEntity hoursadeia WHERE hoursadeia.hoursoffteamid = g.id ) as wresadeias,(CASE WHEN tg.type > 0 THEN 1 ELSE 0 END ) as isadeia,(CASE WHEN g.status=1 THEN 1 ELSE 0 END ) as isdatecalculation,(CASE WHEN g.status=2 THEN 1 ELSE 0 END ) as ishourcalculation,(SELECT COALESCE(COUNT(tstatus.id),0) FROM TeamEntity tstatus
INNER JOIN TeamgroupEntity tgstatus ON tstatus.groupid = tgstatus.id
WHERE tstatus.groupid = :groupid
AND tgstatus.type = 0
AND ( (tstatus.datein >= :periodStart AND tstatus.datein <= :periodStop)
AND (tstatus.dateout >= :periodStart AND tstatus.dateout <= :periodStop) ) ) as teamcount
FROM TeamEntity g
INNER JOIN TeamgroupEntity tg ON g.groupid = tg.id
WHERE g.groupid = :groupid
AND ( (g.datein >= :periodStart AND g.datein <= :periodStop)
AND (g.dateout >= :periodStart AND g.dateout <= :periodStop) )
ORDER BY g.dateout
问题是,第一个select
子查询无法正确转换。例如,jpql查询的子句AND ts.memberid = g.memberid
(列ts.memberid
来自内部查询,g.memberid
来自父查询)没有正确转换,并且之间的链接父查询,内部查询丢失。但是,链接到父查询的所有列都将成为内部查询中的表。
有什么主意吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。