You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle转PostgreSQL递归查询迁移求助:结果与原库不一致

Oracle到PostgreSQL查询迁移修正

原Oracle查询的逻辑是:

  1. 递归遍历tab2的树形结构,从id=5开始,向上获取所有祖先节点的id(包括id=5本身),递归条件为上一层记录的parentid等于当前层记录的id
  2. 从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:05:33