背景
postgresql-14 经常有表是这么设计的,同一行记录有自己的id,也有上级的id,例如省市区等,然后经常有需求需查找整个省下面的所有市,所有区的需求,用代码递归遍历查询速度太慢,直接使用pg的递归写法可以秒出结果
sql
SELECT * from table WHERE id in
(
WITH RECURSIVE T AS (
SELECT ID,
name,
parent_id
FROM
table
WHERE
条件
UNION
SELECT
C.ID,
,
C.parent_id
FROM
table C
INNER JOIN T ON C.parent_id = T.ID
)
SELECT ID
from
T
ORDER BY
parent_id
)
条件处可自行修改