游标递归解决树形节点删除问题

表:

 

--删除节点
create procedure DeleteTreeNode_Pro
   @ID int
as 
   declare  Mycursor  cursor local

   for
      select ID from TreeView_Table where PID=@ID
   open Mycursor
  declare @innerID int
  Fetch next from Mycursor into @innerID
  while(@@Fetch_Status=0)
  begin
    exec DeleteTreeNode_Pro @innerID
    Fetch next from Mycursor into @innerID 
  end
  close Mycursor
  deallocate Mycursor
  delete from TreeView_Table where ID=@ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MySQL中进行递归查询子节点,可以使用以下方法: 1. 使用递归CTE(Common Table Expressions): 在MySQL 8.0版本及以上,可以使用递归CTE来实现递归查询。递归CTE允许在查询中递归引用同一表,并在每次迭代中执行递归步骤。例如: ```sql WITH RECURSIVE sub_tree AS ( SELECT id, parent_id, name FROM t_files WHERE id = <初始节点ID> UNION ALL SELECT f.id, f.parent_id, f.name FROM t_files f JOIN sub_tree st ON f.parent_id = st.id ) SELECT * FROM sub_tree; ``` 上述查询中,使用了一个递归CTE子查询`sub_tree`,它首先选择初始节点,然后通过递归连接`t_files`表自身,直到找到所有子节点。 2. 使用存储过程: 如果您的MySQL版本不支持递归CTE,可以通过编写存储过程来实现递归查询。存储过程可以使用循环和条件语句来逐级查询子节点。以下是一个示例存储过程: ```sql DELIMITER // CREATE PROCEDURE get_child_nodes(IN initial_id INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE current_id INT; DECLARE child_id INT; DECLARE child_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT id, name FROM t_files WHERE parent_id = initial_id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; CREATE TEMPORARY TABLE IF NOT EXISTS temp_results (id INT, name VARCHAR(255)); OPEN cur; read_loop: LOOP FETCH cur INTO child_id, child_name; IF done THEN LEAVE read_loop; END IF; INSERT INTO temp_results VALUES (child_id, child_name); CALL get_child_nodes(child_id); END LOOP; CLOSE cur; SELECT * FROM temp_results; DROP TEMPORARY TABLE IF EXISTS temp_results; END // DELIMITER ; ``` 在上述存储过程中,通过使用游标递归调用存储过程来获取所有子节点,并将结果存储在一个临时表中。 以上是两种常用的方法来在MySQL中进行递归查询子节点。您可以根据您的具体需求选择适合您的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值