[英]How do I write this tricky SQL / JPA query?
(我正在使用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
任何幫助是極大的贊賞!
搶
要考慮這一點,首先要為用戶找到第一個任務。 然后,加入項目信息,並選擇您想要了解的項目:
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
我假設任務有一個項目,雖然你沒有明確說出來。
此解決方案應該適用於任何數據庫。
就像是:
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.