oracle内外链接混合用,混合在一起通过连接,内部连接和总结与Oracle
這里是我的設(shè)置:
我有2個(gè)表分別被稱為“任務(wù)”和“時(shí)間表” “任務(wù)”表是遞歸的,這樣每個(gè)任務(wù)可以有多個(gè)子任務(wù)。每個(gè)時(shí)間表都與一個(gè)任務(wù)相關(guān)聯(lián)(不一定是“根”任務(wù)),并包含在其上工作的小時(shí)數(shù)。
實(shí)施例:
任務(wù)
ID:1 |名稱:任務(wù)A | parent_id:NULL
id:2 |名稱:任務(wù)A1 | parent_id:1
id:3 |名稱:任務(wù)A1.1 | parent_id:2
id:4 |名稱:任務(wù)B | parent_id:NULL
id:5 |名稱:任務(wù)B1 | parent_id:4
次表
id:1 | task_id:1 |小時(shí):1
id:2 | task_id:2 |小時(shí):3
id:3 | task_id:3 |小時(shí):1
id:5 | task_id:5 |時(shí)間:1 ...
我想做的事:
我想要一個(gè)查詢,將返回一個(gè)“任務(wù)層次”工作的所有時(shí)間的總和。如果我們看一下前面的例子,這意味著我想得到以下結(jié)果:
任務(wù)A - 5小時(shí)|任務(wù)B - 1小時(shí)(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
它幾乎工作。唯一的問題是,如果沒有根任務(wù)的時(shí)間表,它將跳過整個(gè)時(shí)間表......但是可能有子時(shí)間表的時(shí)間表,而這正是在任務(wù)B1中發(fā)生的情況。我知道這是造成我的問題的“內(nèi)部連接”部分,但我不知道我該如何擺脫它。
任何想法如何解決這個(gè)問題?
謝謝
2010-05-27
Fran?ois
+0
我認(rèn)為,如果你顛倒表的順序,并使用左外連接,你會(huì)得到任務(wù),即使沒有時(shí)間片上,從而*威力*工作...也許? –
2010-05-27 15:04:27
+0
感謝您的幫助。在我的情況下進(jìn)行左連接會(huì)導(dǎo)致一些主要的性能問題......即使表格索引良好,并且所有表格都是如此。 –
2010-05-27 15:30:47
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的oracle内外链接混合用,混合在一起通过连接,内部连接和总结与Oracle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winform插入时间类型数据到orac
- 下一篇: omnicppcomplete php,