遞迴查詢具有父子關係的表

2021-09-04 13:11:51 字數 760 閱讀 9354

案例描述:

一張表(r),有欄位m,p , 其中欄位m的值可以出現在字段p中,欄位p的值也可以出現在m中,根據指定欄位p的值,查詢欄位m的值集,然後將字段m的值集作為欄位p的值進行遞迴查詢,直到結果集大小為0。

下面是乙個簡單的表(r)結構示例圖:

看到上面的表結構,讓人很容易想到樹形結構,不過上圖並不是乙個嚴格意義上的樹形結構。

嚴格的樹形結構是:根節點+子節點+葉子節點,其中根節點無父節點,子節點有子節點和父節點,葉子節點只有父節點。能夠根據具乙個節點查出所有的葉子節點,注意實際使用中往往欄位m的值是唯一的。

問題:查詢出p=2的所有m值,再以m的值作為p的值進行遞迴查詢。

按照問題描述可以看出:

p=2 查出 m=(4, 6)

p=(4, 6)查出 m=(7, 7)

p=m 無結果為止。

postgresql中的遞迴查詢可以實現此功能:

with recursive v as (

select r."m", r."p" from r where r."p"='2'

union all

select r."m", r."p" from  r inner join  v on r."p"=v."m"

)select * from v;

說明:v作為結果集表,r是原資料表。

不用遞迴來查詢父子關係

static void main string args 注意這裡的employee型別空陣列,不要寫成e5.employeecollection null,否則演算法有問題 employee e55 new employee e55.salary 2 e55.employeecollection ...

oracle遞迴查詢父子關係記錄

資料庫中常要處理父子關係的記錄,在oracle中可以用查詢語句一次把所有的子記錄全部取出來。例如下 t1t11 t111 t1111 t12t121 t1211 db資料字段如下 task id task name t.parent task id 000001 t1 000002 t11 0000...

oracle遞迴查詢,修改及刪除父子關係

資料庫中常要處理父子關係的記錄,在oracle中可以用查詢語句一次把所有的子記錄全部取出來。例如下 t1t11 t111 t1111 t12t121 t1211 db資料字段如下 task id task name parent task id 000001 t1 000002 t11 000001...