簡體   English   中英

如何編寫這個棘手的SQL / JPA查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM