Oracle递归查询(查询当前记录所有父级或子级)向上递归查询 所有上级元数据: 1 2 3 4 SELECT * FROM ORGANIZE START WITH PARENT_ID ='1409' CONNECT BY PRIOR PARENT_ID = TID 1 2 3 4 向上递归查询 所有上级SQL:<br&.
一、需求:
我们在开发中经常遇到一种
数据
库表的设计:一个表中包含父
子
信息
数据
,也就是常说的树形
数据
. —> 最常见的例
子
就是省市区一体表,就是通过id、pid、level来进行控制,从而一张表来存储
数据
.我们进行拿
数据
的时候,不用再连表拿取,直接通过(start with connect by prior)直接便利就会得到
数据
.
二、准备省市区表:
CREATE TABLE REGION (
"ID" NUMBER NOT NULL,
"name" VARCHAR2(200 BYTE),
数据
形式是这样的:
1.首先抛出一条母
数据
(即表中被创建一条初始
记录
),这条母
数据
是未关闭的,ID字段内
记录
它的一个ID信息,modterID字段为空。由相关人员对此
数据
进行初判,判断这条母
记录
确实是正确的,且写的很精细,则预判通过,有相关人员处理,处理完毕后则关闭这条母
记录
。此时该
记录
是没有
子
记录
的。
2.如果针对母
记录
,预判发现有误,则预判人员会关闭母
记录
,并且以母
记录
为根节点,再创建一条
子
记录
(即ID字段内
记录
自己的ID信息,modterID就是上调母
记录
的ID),此时这条
子
记录
未关闭。
from coa_node t1
where T1.partition_key = '202107310015'
and T1.coa_node_type_code = 'Account'
start with t1.coa_node_name = 'LIABILITY'
connect by prior t1.coa_node_name = t1.coa_parent_node_name
部分表结果及关键
数据
如下
SELECT dept_Id, parent_Id FROM DEPT START WITH dept_Id= '1' Connect BY Prior dept_Id = parent_Id
字段名-
子
ID:dept_Id
字段名-父ID:parent_Id
START WITH:从哪一代开始查找,它的ID是什么?将参数写入条件
CONNECT BY PRIOR:关联的2个字段名
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘1’,’10’,’0’);
public static MenuItem findParent(MenuItem menuItem) {
if (menuItem.getParent() == null) {
// 如果没有
父级
,则返回
当前
菜单项
return menuItem;
} else {
//
递归查询
父级
菜单项
return findParent(menuItem.getParent());
public static void main(String[] args) {
MenuItem menuItem1 = new MenuItem(1, "菜单项1", null);
MenuItem menuItem2 = new MenuItem(2, "菜单项2", menuItem1);
MenuItem menuItem3 = new MenuItem(3, "菜单项3", menuItem2);
MenuItem parent = findParent(menuItem3);
System.out.println("
子
级菜单项 " + menuItem3.getName() + " 的
父级
菜单项是:" + parent.getName());
在这个例
子
中,`MenuItem` 类表示菜单项,其中包含菜单项的 ID、名称和
父级
菜单项。`Menu` 类包含了一个 `findParent` 方法,用于
递归查询
子
级菜单项的
父级
菜单项。在 `main` 方法中,创建了三个菜单项,并将第一个菜单项作为整个菜单的根节点。然后,通过调用 `findParent` 方法来
查询
菜单项 3 的
父级
菜单项,最终输出结果为:`
子
级菜单项 菜单项3 的
父级
菜单项是:菜单项1`。
需要注意的是,如果菜单项的层级非常深,或者菜单项的层级非常多,那么使用
递归查询
可能会导致栈溢出。因此,应该在实现递归函数时考虑到这些问题,并进行必要的优化。