首先就知道connect by是專門來作遞歸查詢的,他就是利用數據庫裏表結構的設計的遞歸應用的關係,進行遍歷,從而達到咱們的要求。
connect by後面是進行遞歸的條件,在這個條件句子裏常常會使用到prior這個關鍵字,
這個關鍵字表示的是前一條記錄,好比 connect by prior id = parentid,
這裏代表遞歸的條件規則是上一條記錄的id是下一條記錄的parentid,
這樣下一條的id又是下下條的parentid,
一層層的歸結下去,直到再也不知足這裏的connect by裏的條件,表示已經到達了樹的葉了。
在遞歸裏,還有一個也常常用到 start with,這裏表示的是遍歷的起始的條件,
好比start with parentid = 0 or parentid is null。
這樣咱們能夠肯定來的從什麼條件開始遍歷, 經過start with ..... connect by的配合, 咱們從而能夠頗有針對性的拿到咱們的須要的樹形的數據。數據庫
// 查出帶有等級字段以及該子產品目錄是否爲樹葉的子產品目錄列表
設計
<select id="channel.product.category.sub.level.list" comment="查出帶有等級字段的子產品目錄列表"><![CDATA[ SELECT pc.*, LEVEL , CONNECT_BY_ISLEAF ISLEAF FROM qd_product_category pc WHERE pc.enabled=1 and pc.deleted=0 and pc.parent_id is not null START WITH CATEGORY_NAME = ? and parent_id is null CONNECT BY PRIOR pc.PK_ID = pc.PARENT_ID ]]></select>