Oracle转PostgreSQL递归查询迁移求助:结果与原库不一致
Oracle到PostgreSQL查询迁移修正
原Oracle查询的逻辑是:
- 递归遍历
tab2的树形结构,从id=5开始,向上获取所有祖先节点的id(包括id=5本身),递归条件为上一层记录的parentid等于当前层记录的id - 从
tab1中筛选出id在上述递归结果中,且n以N_开头的n值
你编写的PostgreSQL递归CTE没有正确实现树形遍历逻辑,也未匹配原查询的筛选规则,以下是修正后的正确查询:
WITH recursive tab2_ancestors AS ( -- 递归起始点:对应Oracle的START WITH id=5 SELECT id FROM tab2 WHERE id = 5 UNION ALL -- 递归逻辑:对应Oracle的CONNECT BY PRIOR parentid=tab2.id SELECT t.id FROM tab2 t JOIN tab2_ancestors ta ON ta.parentid = t.id ) SELECT n FROM tab1 WHERE id IN (SELECT id FROM tab2_ancestors) AND n LIKE 'N_%';
核心修正说明:
- 单独用递归CTE实现
tab2的树形遍历:初始部分取出id=5的起始节点,递归部分通过关联上一层的parentid与当前层的id,实现和Oracle完全一致的向上找祖先节点的逻辑 - 最后关联
tab1时,保留原查询的两个筛选条件:id在递归结果中、n匹配N_%
内容的提问来源于stack exchange,提问作者user151210
相关产品推荐
相关产品推荐

