1.表結構
2.需求
查詢某條記錄的所有父親節點,或者所有孩子節點。
3.向上查詢(查詢所有父親節點)
注意,這里返回的記錄包含自己。
sql如下:
1 WITH RECURSIVE res AS ( 2 SELECT t1.* FROM t_code as t1 3 WHERE t1.enable = 'true' and t1.id = '4' 4 5 UNION 6 SELECT t2.* from t_code as t2 7 INNER JOIN res as t3 ON t2.id = t3.parent_id 8 WHERE t2.enable = 'true' 9 )SELECT res.* from res
返回結果:
4.向下查詢(查詢所有孩子節點)
注意,這里返回的記錄包含自己。
和上面的sql只有一個差別:
1 INNER JOIN res as t3 ON t3.id = t2.parent_id
sql如下:
1 WITH RECURSIVE res AS ( 2 SELECT t1.* FROM t_code as t1 3 WHERE t1.enable = 'true' and t1.id = '1' 4 5 UNION 6 SELECT t2.* from t_code as t2 7 INNER JOIN res as t3 ON t3.id = t2.parent_id 8 WHERE t2.enable = 'true' 9 )SELECT res.* from res
返回結果:
綜上所述,可以將這段sql看做三個部分組成:(1)初始條件。(2)迭代條件。(3)將結果作為下一個迭代的初始條件。
其中迭代條件中,寫作 INNER JOIN res as t3 ON t3.id = t2.parent_id 時,是表示上一次查詢的結果(t3)是此時查詢記錄(t2)的父親。即始終是用parent來查詢children,為向下查詢。