首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有START with和CONNECT BY PRIOR的查询从oracle迁移到postgresql

将带有START with和CONNECT BY PRIOR的查询从oracle迁移到postgresql
EN

Stack Overflow用户
提问于 2018-03-28 22:51:23
回答 1查看 2.4K关注 0票数 0

我正在将一个进程从oracle迁移到postgresql,并且我遇到了另一个转换问题。

我一直在研究如何迁移oracle查询,它有"START WITH“和"CONNECT BY the”,我已经记录了关于这一点的文档,我认为最简单的方法是“使用递归”。

进行查询的迁移,但我不确定它们抛出的结果,因为bd oracle和postgres是不同的,不可能将bd同源。

这是Oracle中的查询

代码语言:javascript
复制
SELECT edef_codigo, etdf_transac, edef_detail--, LEVEL
FROM edeft
WHERE edef_distrib in('OM', 'N/A')
AND  pers_codigo_socadm = 311745439
AND  ctac_correlativo = 7513
START WITH etdf_transac = 'SDN'
CONNECT BY PRIOR edef_codigo = edef_padre;

这是postgresql中的查询

代码语言:javascript
复制
WITH RECURSIVE edf AS ( SELECT ed.edef_codigo, ed.etdf_transac, 
                               ed.edef_detail
                        FROM edeft ed
                        WHERE ed.edef_distrib in('OM', 'N/A')
                        AND  ed.pers_codigo_socadm = 311745439
                        AND  ed.ctac_correlativo = 7513
                        AND ed.etdf_transac = 'SDN'

                        UNION ALL

                        SELECT ed.edef_codigo, ed.etdf_transac, 
                               ed.edef_detail
                        FROM edeft ed
                             JOIN edf ON edf.edef_codigo = ed.edef_padre    
                        WHERE ed.edef_distrib in('OM', 'N/A')
                        AND  ed.pers_codigo_socadm = 311745439
                        AND  ed.ctac_correlativo = 7513                 
                      )
                    SELECT * FROM edf;

我仍然是postgres的新手,这次咨询让我变得特别复杂,因为我还没有找到与我所拥有的类似的例子。

EN

回答 1

Stack Overflow用户

发布于 2018-05-23 14:57:35

是的,我也在Postgresql中使用了"With Recursive“查询的"Connect by prior”转换,我发现这是正确的方法。

引用connect by prior的一个简单示例:

Oracle:

代码语言:javascript
复制
Select name, age from user_test connect by prior user_id=parent_id start with user_id='a';

Postgres:

代码语言:javascript
复制
with recursive cte_name as 
(select u1.name, u1.user_id, u1.age from user_test u1 where user_id='a' 
UNION ALL select u2.name, u2.user_id, u2.age from user_test u2 
join cte_name on cte_name.user_id=u2.parent_id) select name,age from cte_name;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49537740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档