格式:
select ... from + 表名 where + 條件3 start with + 條件1 connect by prior + 條件2
條件1: 表示從哪個節點開始查詢, 也就是通過條件1 查詢到的資料, 作為後續查詢的起始節點(引數).
條件2: 是連線條件,其中用prior表示上一條記錄,例如connect by prior id = pid,意思就是上一條記錄的id是本條記錄的pid,即本記錄的父親是上一條記錄。
條件3: 不能用在 connect by 後, 這裡的條件判斷, 等價於 在最後查詢出結果列表之後, 再進行條件篩選; 並非 刪除掉 節點及子節點;
關鍵點:
nocycle關鍵字, 有時候資料本身 不合理會導致出現迴圈的問題, 如 將上述的 id '00001' 記錄的 'pid' 也改為 '00001', 會出現迴圈的問題, 這是, 需要用到 nocycle 即可消除迴圈;
connect by nocycle prior id = pid 即可.
connect_by_isleaf 表示當前節點是否是葉子節點
level 表示當前節點所處層級, 這裡的層級指的是 從 start with 查詢到的節點開始往下算起, 當前屬於第幾層級
select level, t.* from tb_menu t start with id = 1 connect by prior t.id = t.parent;
(3)select level, t.id, lpad(' ', level * 4) || t.title as title, t.parent
from tb_menu t
start with id = 6
connect by prior t.id = t.parent;
(4)select level, t.* from tb_menu t start with id = 6 connect by t.id = prior t.parent;
select distinct id,name,parentdeptcode,sort from sys_org start with id in('ff8080816a14b3b6016a14bc293d0018','38b03716fc5140049d829524828ee651','aced077e59b546458fad38e92ba65605')connect by prior id=parentdeptcode order by sort
distinct:去重 mysql 組織層級查詢 mysql 層級結構查詢
描述 最近遇到了乙個問題,在mysql中如何完成節點下的所有節點或節點上的所有父節點的查詢?在oracle中我們知道有乙個hierarchical queries可以通過connect by來查詢,但是,在mysql中還沒有對應的函式 下面給出乙個function來完成的方法 下面是sql指令碼,想...
oracle遞迴查詢(層級查詢)
select from table t start with t.id id connect by prior t.id t.parentid 從對應id開始查,包括本節點和所以子節點 select from table t start with t.parentid pareanid connec...
SQL查詢無限層級結構的所有下級,所有上級
無限層級結構的table1表,id 主鍵 parentid 父級id 查詢某個id的所有下級或所有上級,使用with as,union all 查詢 1 查詢id為1所有的下級 with t as select from table1 where id 1 union all select a.fr...