2017.12.07 postgresql使用with recursive完成迭代查詢


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,為向下查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM