国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

如何在Oracle層次查詢中給SIBLINGS排序

瀏覽:155日期:2023-11-28 08:24:15
Oracle SELECT語句中的START WITH和CONNECT BY子句自動(dòng)阻斷一個(gè)層次。缺少這項(xiàng)特性,就需要一個(gè)復(fù)雜的自聯(lián)接來確定行之間的邏輯聯(lián)系。START WITH子句指定被認(rèn)為是層次起點(diǎn),或“根”的一行或幾行。然后CONNECT BY PRIOR子句指明哪些行彼此關(guān)聯(lián)。

例如,列表A中的查詢從Oracle HR樣本模式的EMPLOYEES表中生成一個(gè)“Reports To”列表。

column 'Reports To' format a30set pagesize 9999SELECT LPAD(' ', 2*(LEVEL-1))||last_name 'Reports To', employee_idFROM employeesSTART WITH employee_id IN (101, 102)CONNECT BY PRIOR employee_id = manager_id/

列表A

LEVEL偽列表明報(bào)告當(dāng)前嵌套的深度,這里我使用LPAD雇員姓名對它們進(jìn)行縮排。START WITH條件指出只有雇員101和102被認(rèn)為是起點(diǎn)。然后CONNECT BY PRIOR子句將一行中的employee_id列與另一行的manager_id列連接起來,指出誰向誰報(bào)告。

如果你在HR模式中運(yùn)行這個(gè)查詢,你會(huì)注意到某個(gè)經(jīng)理列表中的姓沒有分類,它們以O(shè)racle在處理層次時(shí)遇到它們的順序排列。

如果你希望下屬以字母順序排列,你可以嘗試對原始的last_name列使用ORDER BY。但是,這樣會(huì)破壞層次,把它變回一個(gè)單調(diào)的姓名列表。

你還可以首先對偽列LEVEL使用ORDER BY,它說明某個(gè)特殊行在層次中的深度。這同樣也會(huì)破壞層次,首先會(huì)列出所有的經(jīng)理,然后是向他們報(bào)告的雇員。

在Oracle 10g(兩個(gè)版本)中,現(xiàn)在很容易實(shí)現(xiàn)這一點(diǎn):你可以使用新的SIBLINGS關(guān)鍵字建立正確的順序。其語法如下:

ORDER SIBLINGS BY <expression>

因此在查詢結(jié)尾處增加下面這個(gè)子句:

ORDER SIBLINGS BY last_name

將會(huì)保護(hù)層次,并在每個(gè)等級中以字母順序排列雇員的姓。注意最初的last_name用作“Reports To”的別名?!癛eports To”中的額外空間會(huì)影響排序,因此必須使用最初的last_name。列表B中是增加ORDER SIBLINGS BY前后的輸出結(jié)果。

SQL> @siblings_without_orderbyReports To EMPLOYEE_ID------------------------------ -----------Kochhar101Whalen 200Mavris 203Baer 204Higgins205Gietz206Greenberg 108Faviet 109Chen 110Sciarra111Urman112Popp 113De Haan102Hunold 103Ernst104Austin 105Pataballa 106Lorentz10718 rows selected.SQL> @siblings_with_orderbyReports To EMPLOYEE_ID------------------------------ -----------De Haan102Hunold 103Austin 105Ernst104Lorentz107Pataballa 106Kochhar101Baer 204Greenberg 108Chen 110Faviet 109Popp 113Sciarra111Urman112Higgins205Gietz206Mavris 203Whalen 20018 rows selected.SQL>

列表B

標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 恭城| 湖口县| 庄浪县| 峨眉山市| 汝城县| 厦门市| 哈尔滨市| 唐山市| 盈江县| 建昌县| 米脂县| 洛阳市| 兴义市| 恭城| 宜章县| 福州市| 随州市| 丽水市| 榆社县| 新宾| 手游| 丘北县| 永修县| 松潘县| 高安市| 皋兰县| 孝感市| 沿河| 定远县| 磐石市| 九寨沟县| 湄潭县| 剑川县| 营山县| 揭阳市| 始兴县| 石台县| 兴业县| 林甸县| 金湖县| 山丹县|