`

关于两个表的递归查询和删除

阅读更多

 

Oracle 的递归查询:

1.  从上级递归查下级

  

select  org_  from org_ org_  start  with org_.org_id = ? connect  by  prior  org_.org_id  = org_.org_parentid 
2.从下级递归查上级
select  org_  from org_ org_  start  with org_.org_id = ? connect  by  org_.org_id  = org_.org_parentid

 

3.  两表连接递归查询

 

     在这里假设有两张表,部门表(org_) 和员工表(user_)

     根据指定的部门ORG_ID,查询所有该部门的员工及子部门的员工

select user_.user_id from org_ org_, user_ user_ where user_.org_id = org_.org_id and ( user_.org_id = ? or user_.org_id in     ( select t.org_id from org_ t start with t.org_id = ? connect by prior t.org_id = t.org_parentid ) )

  

    查询部门所有的ORG_ID

  

select t.org_id,t.org_name from org_ t   
start with t.org_id = 3 connect by prior t.org_id = t.org_parentid

 4.过于删除操作的JAVA代码

StringBuilder del_sql_user=new StringBuilder();
StringBuilder del_sql_org=new StringBuilder();
// 递归查出起始部门下属的用户USRE_ID和改用户对应的部门ORG_ID
String select_userlist_id = "select user_.user_id from org_ org_, user_ user_  where user_.org_id = org_.org_id(+) and ( user_.org_id = "+ org_id+ " or user_.org_id in ( select t.org_id from org_ t start with t.org_id = "+ org_id+ " connect by prior t.org_id = t.org_parentid )  )";

String[] delsql_arr=new String[2];
del_sql_user.append("delete from user_ where user_id in("+select_userlist_id+")");
			
// 递归查出起始部门下属的部门ORG_ID
String select_orglist_id = "select t.org_id from org_ t start with t.org_id = "+ org_id + " connect by prior t.org_id = t.org_parentid";
del_sql_org.append("delete from org_ where org_id in("+select_orglist_id+")");
			
delsql_arr[0]=del_sql_user.toString();
delsql_arr[1]=del_sql_org.toString();
			
this.getJdbcTemplate().batchUpdate(delsql_arr);

 

 

  
分享到:
评论

相关推荐

    SQL 递归查询,并将结果集保存在临时表中

    临时表有两种类型:本地临时表(以单个#开头)和全局临时表(以两个##开头)。本地临时表仅对当前会话可见,而全局临时表对所有会话可见,但在所有会话结束时自动删除。 4. **INSERT INTO...SELECT**: `INSERT ...

    删除字符(递归)_删除字符c++_递归删字符_

    递归函数通常包含两个部分:基本情况和递归情况。对于删除字符串中特定字符的任务,基本情况可能是字符串为空或不包含待删除字符。递归情况则是处理字符串非空且包含需要删除的字符。 以下是一个简单的递归函数示例...

    sql递归查询实例2

    递归查询使用两个部分定义CTE:非递归部分和递归部分。 #### 定义递归函数 为了实现递归查询,我们定义了一个名为`aa`的函数,该函数接受一个`upperid`作为参数,并返回一个包含`id`、`upperid`和`level`的表。 `...

    递归算法应用:删除某一个节点的子树算法

    二叉树是一种特殊的树形结构,每个节点最多有两个孩子节点,即左孩子节点和右孩子节点。每个节点都有一个值,且节点之间的关系是父子关系。删除某一个节点的子树意味着删除该节点和它的所有子孙节点。 算法设计:...

    (java递归)删除文件

    递归函数`findFiles`是核心,它接受两个参数:`filePath`和`fileName`数组。这个函数首先检查给定路径是否为目录。如果是目录,则它会遍历该目录下的所有文件和子目录,并对每个子项递归调用自身。如果`filePath`...

    两个表 关于树的组合

    在IT领域,尤其是在数据库管理和数据处理中,"两个表 关于树的组合"的主题涉及到层次结构数据模型的处理。这种模型常用于表示具有层级关系的数据,例如组织结构、目录树或者菜单系统。在这个场景中,我们有两个表,...

    一个递归删除指定目录和文件的例子

    - `DelDir.cpp` 和 `DelDirDlg.cpp`:这是两个实现功能的源代码文件,可能分别包含了`DelDir`函数的实现和一个对话框类,用于用户交互。 - `folder_dialog.cpp`:可能包含了选择目录的对话框功能。 - `StdAfx.cpp` ...

    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)

    递归删除通常涉及替换节点的查找,而非递归删除则需要维护一个栈来跟踪路径,以便找到合适的替代节点并更新路径上的父节点。 在提供的代码中,可能包含了对这三种操作的实现,包括递归和非递归方法。使用VS2008...

    数据结构和算法:链表栈递归

    由于链表的特性,这种操作的时间复杂度为O(max(n, m)),其中n和m分别是两个链表的长度。 在链表部分翻转的操作中,要求从链表的m位置到n位置进行翻转,而不改变其他位置的节点。这个问题可以通过头插法解决,即在...

    非递归删除非空目录(源代码)

    在Windows API中,删除文件和目录是两个不同的操作,由`DeleteFile`和`RemoveDirectory`函数来执行。本文将详细讲解这两个API函数以及如何在非递归方式下删除非空目录。 `DeleteFile`函数用于删除指定的文件。它的...

    递归链表中值最大的节点

    每个结点包括两个部分: 1. **数据域**:用于存储实际的数据元素。 2. **指针域**:用于存储指向下一个结点地址的指针。 链表的主要优点包括: - 动态分配内存,可以根据需要在运行时添加或删除结点。 - 不需要预先...

    两个链表求交集(链表基础练习)

    综上所述,解决"两个链表求交集"的问题涉及到链表的基本操作和算法设计,通过哈希表或双指针等方法可以高效地找到交集。理解并掌握这些知识对于提升编程技能和解决实际问题具有重要意义。在实际编程练习中,可以尝试...

    插入、查找和删除函数用非递归的方式实现

    首先找到待删除节点,然后根据其子节点情况决定是直接删除、替换为子节点,还是分裂成两个节点。非递归实现可以使用栈来模拟递归过程,但避免了实际的递归调用。 以上就是插入、查找和删除操作非递归实现的基本原理...

    堆排序递归和非递归的实现

    在堆排序的递归实现中,通常包括两个主要步骤:建立堆和堆调整。建立堆是将无序序列构造成一个合法的堆,这可以通过从最后一个非叶子节点开始,自底向上逐层调整完成。堆调整则是将堆顶元素(最大或最小元素)与...

    PTA 两个有序链表序列的合并

    这个题目“PTA 两个有序链表序列的合并”主要涉及到链表的操作和合并策略,这对于理解和掌握链表操作有极大的帮助。下面我们将深入探讨这个主题。 链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据和...

    消除文法的左递归

    - 如果文法中有两个非终结符 B 和 C,且存在 B → Bα | β 和 C → Cβ | γ 形式的产生式,则称 B 和 C 之间存在间接左递归。 - 通常情况下,通过多次迭代和替换,可以将含有间接左递归的文法转化为不含左递归的...

    数据结构 递归和流 算法

    递归通常涉及两个主要部分:基本情况(base case)和递归情况(recursive case)。基本情况是最简单的情况,可以直接解决;递归情况则是问题被分解为更小的部分,然后通过调用自身解决。经典的递归例子包括计算阶乘...

    mysql 树形结构查询

    在上面的例子中,我们定义了两个存储过程:findLChild 和 iterative。findLChild 是主存储过程,负责调用 iterative 存储过程以实现树形结构的查询。iterative 存储过程是递归存储过程,负责递归调用自身以实现树形...

    链表、递归等数据结构代码

    根据指针的不同,链表可以分为单链表(每个节点只有一个指针指向下一个节点)、双链表(每个节点有两个指针,一个指向前一个节点,一个指向后一个节点)和循环链表(最后一个节点的指针回指到第一个节点)。...

    深入sql oracle递归查询

    这个递归查询首先为满足条件的第一个月份计算返利,然后逐月递归计算,将前一个月的返利额带入当前月的计算中。 总的来说,Oracle和SQL Server都提供了强大的递归查询功能,能够处理各种复杂的层级数据问题。理解并...

Global site tag (gtag.js) - Google Analytics