2013-04-02 167 views
2

我有類似這樣得到子記錄所有父記錄

表名Oracle表:注意

NoteID(PK)  NoteText ParentNoteID 
1     x   - 
2     y   1 
3     z   2 

在這裏,我需要在notetext的頂部執行查詢一樣說, note.note_text像'%z%'這樣只有第三個記錄。

我希望在得到第三條記錄之後拉取其父母的記錄,這通過類似查詢匹配我需要通過查看 parentNoteID返回。因此,第3條記錄的父記錄爲2,父記錄2的結果是1.因此結果應該取 所有三條記錄。

爲了擴展這個,如果我的查詢匹配兩個子記錄,顯然它應該獲得所有的父母記錄。

實施例:

NoteID(PK) NoteText ParentNoteID 
1   x   - 
2   y   1 
3   z   2 
4   a   - 
5   b   4 
6   z   5 

note.note_text like '%z%'應拉,上述所有6條。

在此先感謝 Eswar。

回答

5

你會使用連接來做到這一點。

例如像

select * 
    from tbl1 
start with note_text like '%z%' 
connect by note_id = prior parent_note_id 

會做到這一點。

示例小提琴:http://sqlfiddle.com/#!4/0c6ea/1

+0

哇!這真是太棒了.Kudos.I只是修改了查詢以滿足我的需求select * from NOTE通過NOTE_TEXT開始,像'%Child%'通過之前的PARENT_NOTE_ID = NOTE_ID連接; – user1650864

+0

嗨,謝謝你的迅速和迷人的迴應。如果你能解釋如何使用兩種連接方式,那將會更好。我試圖查詢像'select * 從tbl1 開始與note_text'%z%' 通過以前的PARENT_NOTE_ID = NOTE_ID和NOTE_ID = PARENT_NOTE_ID'連接,目的是獲取所有子記錄,如果類似的查詢匹配父線程,還反之亦然。但它僅適用於通過聲明進行的第一次連接,而不考慮第二次連接。謝謝。 – user1650864

+0

@ user1650864你的意思是你想要遍歷樹以及它嗎?例如'通過nocycle noteid = previous parentnoteid或previous noteid = parentnoteid'連接?例如http://sqlfiddle.com/#!4/9afd0/1..weid也有id = 10,即使它是matchind id = 3行的孩子。 – DazzaL

相關問題