遞迴會用到 with 語句。普通的 with 語句可以看作乙個子查詢,我們在 with 外部可以直接使用這個子查詢的內容。
當遞迴查詢時,我們是在 with 語句內部來引用這個子查詢。還是上面的例子,我們使用 with 語句來查詢。
with
temp_product (product_level, id, parent_product_id,name)as(
select
0as product_level,id,parent_product_id,name
from
product
where
parent_product_id is
null
union
allselect
tp.product_level +
1,p.id,
p.parent_product_id,
p.name
from
product p
join temp_product tp
onp.parent_product_id=tp.id
)select
product_level,
id,parent_product_id,
lpad(
' ',
2* product_level)
|| name as name
from
temp_product
深度優先搜尋查詢
search depth first
by id
set order_by_id
廣度優先使用的是下面的 sql 語句
search breadth first
by id
set order_by_id
SQL 高階查詢(層次化查詢,遞迴)
層次化結構可以理解為樹狀資料結構,由節點構成。比如常見的組織結構由乙個總經理,多個副總經理,多個部門部長組成。再比如在生產製造中一件產品會有多個子零件組成。舉個簡單的例子,如下圖所示 汽車作為根節點,下面包含發動機和車身兩個子節點,而子節點又是由其他葉節點構成。葉節點表示沒有子節點的節點 假如我們要...
oracle 層次化查詢
1 層次化查詢 層次化 同一資料庫表中多條資料存在父子關係,形成樹狀結構。利用connect by 進行層次化查詢 按照某種規則,獲得節點路徑上的節點集合。如 select from market b start with b m id 10 b connect by prior b p id m ...
Oracle 層次化查詢
create table employees employee id integer constraint employees pk primary key,manager id integer constraint employees fk employees references employe...