近期的面試過程中發現凡是提到oracle基本都會問乙個有關樹形結構資料查詢的問題。
後經朋友指點知道這種問題一般通過遞迴查詢來解決。
今天自己實踐了一下遞迴查詢的使用,經驗如下:
1)關鍵字為start with...connect by prior,可以沒有where關鍵字。
##start with 部分條件定義最根的節點,並且抽取結果只會是從最根節點延伸的的節點。(結果可能包括根節點)
比如,start with 建德市,那麼結果將只會是建德市和淳安鎮,start with 杭州市則上城下城建德淳安都將被列為抽取結果的物件。
##connect by prior定義了抽取時遞迴的鏈結規則。這裡需要注意遞迴只有到達前面start with定義的最根節點才會停止。
舉例來說,當我定義start with clm_value='杭州市' connect by prior clm_key=clm_subkey的話,淳安的遞迴結果將會是杭州,而非建德。
2)有乙個level的關鍵字很有用
假設查詢了杭州下屬的地區,但是只想要大區,不要鎮級(也就是不要淳安),那就可以在where條件中加上level=2。這裡杭州的level是1,上城下城建德的level是2,淳安是3。這個字段表示該條資料經過幾次遞迴才找到最根節點。
附:所用table以及資料
create table "tst_tb"
( "clm_key" number(2,0),
"clm_subkey" number(2,0),
"clm_value" char(10 byte) default '' not null enable,
constraint "pk_tst_tb" primary key ("clm_key")
)
insert into tst_tb (clm_key,clm_subkey,clm_value) values (1,null,'杭州市 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (2,1,'上城區 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (3,1,'下城區 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (4,1,'建德市 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (5,4,'淳安鎮 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (6,null,'上海市 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (7,6,'嘉定區 ');
insert into tst_tb (clm_key,clm_subkey,clm_value) values (8,7,'江橋鎮 ');
ps這是初步實踐了一下,以後有深入研究了持續更新。
對於切片的一些理解
使用技巧 type struct 乙個切片是由資料指標加上長度和容量組成的,類似與c 中的vector。var a int 等價於nil b int 表示乙個空的切片,不等於nil c int len,cap都為3的切片 d c 2 cap為3,len為2。與c共享一片記憶體位址 e c 0 2 c...
對於java 集合的一些理解
list set繼承自collection儲存引用型別 且只能乙個乙個儲存 arraylist linkedlist vector 都是繼承自list arraylist linkedlist初始化為10 擴容後為1.5倍 vector 為2倍 arraylist 底層採用的資料結構為陣列儲存元素,...
對於多執行緒的一些理解
實現多執行緒的兩種方法 繼承thread類 實現runnable介面 jdk1.5之後提供了乙個心得callable介面 在啟動多執行緒的時候必須通過start 方法,而不能直接呼叫run 方法 原因 先來看下start 方法在thread類中的定義 public synchronized void...