oracle内外链接混合用,混合在一起通过连接,内部连接和总结与Oracle
這里是我的設置:
我有2個表分別被稱為“任務”和“時間表” “任務”表是遞歸的,這樣每個任務可以有多個子任務。每個時間表都與一個任務相關聯(不一定是“根”任務),并包含在其上工作的小時數。
實施例:
任務
ID:1 |名稱:任務A | parent_id:NULL
id:2 |名稱:任務A1 | parent_id:1
id:3 |名稱:任務A1.1 | parent_id:2
id:4 |名稱:任務B | parent_id:NULL
id:5 |名稱:任務B1 | parent_id:4
次表
id:1 | task_id:1 |小時:1
id:2 | task_id:2 |小時:3
id:3 | task_id:3 |小時:1
id:5 | task_id:5 |時間:1 ...
我想做的事:
我想要一個查詢,將返回一個“任務層次”工作的所有時間的總和。如果我們看一下前面的例子,這意味著我想得到以下結果:
任務A - 5小時|任務B - 1小時(S)
起初我想這
SELECT TaskName, Sum(Hours) "TotalHours"
FROM (
SELECT replace(sys_connect_by_path(decode(level, 1, t.name), '~'), '~') As TaskName,
ts.hours as hours
FROM tasks t INNER JOIN timesheets ts ON t.id=ts.task_id
START WITH PARENTOID=-1
CONNECT BY PRIOR t.id = t.parent_id
)
GROUP BY TaskName Having Sum(Hours) > 0 ORDER BY TaskName
它幾乎工作。唯一的問題是,如果沒有根任務的時間表,它將跳過整個時間表......但是可能有子時間表的時間表,而這正是在任務B1中發生的情況。我知道這是造成我的問題的“內部連接”部分,但我不知道我該如何擺脫它。
任何想法如何解決這個問題?
謝謝
2010-05-27
Fran?ois
+0
我認為,如果你顛倒表的順序,并使用左外連接,你會得到任務,即使沒有時間片上,從而*威力*工作...也許? –
2010-05-27 15:04:27
+0
感謝您的幫助。在我的情況下進行左連接會導致一些主要的性能問題......即使表格索引良好,并且所有表格都是如此。 –
2010-05-27 15:30:47
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle内外链接混合用,混合在一起通过连接,内部连接和总结与Oracle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winform插入时间类型数据到orac
- 下一篇: oracle中persons,oracl