(我正在使用Oracle和JPA(来自Java EE 5,WebSphere 7))。
我有一个Project类,Project有一个Tasks列表。
每个任务都有一个序列号,因此我可以确定任务的顺序(Task.seq),分配的用户(Task.userId)和字符串状态Task.status(“IN_PROGRESS”或“COMPELTE”)。项目的任务由其指定的用户按其数字顺序“完成”。
我的问题是......这是一个棘手的问题......我需要一个执行以下操作的查询:
给定用户标识,找到将该项目的当前任务分配给用户的所有项目。 (“当前任务”是在数字序列中找到的第一个任务,其状态为“IN_PROGRESS”。)
我对SQL并不擅长,而且对JPA很新 - 请帮忙!
PS。例如,这是我正在使用的查询,它为我填充了填充了任务列表的所有Project对象:
select distinct p from Project p left join fetch p.taskList
非常感谢任何帮助!
罗布
答案 0 :(得分:1)
要考虑这一点,首先要为用户找到第一个任务。然后,加入项目信息,并选择您想要了解的项目:
select distinct p.*
from (select userid, projectid, min(t.seq) as firstseq
from Task t
where t.userid = <userid> and
t.status = 'IN PROGRESS'
group by userid, projectid
) u join
Task t
on t.projectid = u.projectid and
t.seq = u.firstseq join
Project p
on p.projectid = u.projectid
我假设任务有一个项目,尽管你没有明确说出来。
此解决方案应该适用于任何数据库。
答案 1 :(得分:1)
类似的东西:
Select p from Project p join p.tasks t where t.user = :user and t.seq = (Select min(t2.seq) from Task t2 where t2 = t and t2.status = 'IN_PROGRESS')