首页 > 代码库 > oracle和postgresql 递归查询父子关系记录语法区别
oracle和postgresql 递归查询父子关系记录语法区别
oracle:
一、数据
db数据字段如下:
task_id task_name t.parent_task_id ***
*** *** *** ***
000001 t1 *** ***
000002 t11 000001 ***
000005 t12 000001 ***
000003 t111 000002 ***
000004 t1111 000003 ***
000006 t121 000005 ***
000007 t1211 000006 ***
*** *** *** ***
二、格式
Select * from …. Where [结果过滤条件语句]
Start with [and起始条件过滤语句]
Connect by prior [and中间记录过滤条件语句]
三、查找所有下级
select * from tablename start with id=1 connect by prior id=pid
注意:此sql能查找id=1的数据的所有下级,写sql语句时要注意,因为是从id开始查找下级,所以connect by prior 子句的条件是 id=pid
四、查找所有上级
select * from tablename start with id=5 connect by prior pid=id
因为是从id开始查找上级,所以connect by prior 子句的条件是pid=d
select t.task_id ,t.task_name ,t.parent_task_id from t_task t start with task_id=‘000001‘ connect by prior task_id = parent_task_id;
五、显示结果
结果显示:
task_id task_name t.parent_task_id
000001 t1
000002 t11 000001
000003 t111 000002
000004 t1111 000003
000005 t12 000001
000006 t121 000005
000007 t1211 000006
postgresql:
查询父节点下所有的子节点
WITH recursive fileinfo (pk_fi_id, f_fi_parentid) AS ( SELECT pk_fi_id , f_fi_parentid FROM t_fileinfo WHERE pk_fi_id = ‘92719f78-22d6-4db1-a484-dff34de76890‘ UNION ALL SELECT mm.pk_fi_id , mm.f_fi_parentid FROM t_fileinfo AS mm INNER JOIN fileinfo AS child ON mm.f_fi_parentid = child.pk_fi_id ) SELECT * FROM fileinfo
oracle和postgresql 递归查询父子关系记录语法区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。