mysql递归自身连接_MySQL之递归小问题案例分享

软件安装:装机软件必备包

SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。mysql本身不支持递归语法,但可通过自连接变相实现一些简单的递归,本文主要介绍了MySQL之递归小问题,需要的朋友可以参考下,希望能帮助到大家。

--递归小方法:临时表和普通表的不同方法

--这题使用的是2次临时表查询父节点的递归

drop table if exists test;

create table test(

id varchar(100),

name varchar(20),

parentid varchar(100)

);

insert test select

'13ed38f1-3c24-dd81-492f-673686dff0f3', '大学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select

'1ce203ac-ee34-b902-6c10-c806f0f52876','小学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select

'37e2ea0a-1c31-3412-455a-5e60b8395f7d', '教师' , null union all select

'c877b7ea-4ed3-f472-9527-53e1618cb1dc', '高数老师', '13ed38f1-3c24-dd81-492f-673686dff0f3' union all select

'ce50a471-2955-00fa-2fb7-198f6b45b1bd', '中学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d';

delimiter $$

create procedure usp_ser(in idd varchar(100))

begin

declare lev int;

set lev=1;

drop table if exists tmp1;

drop table if exists tmp2;

CREATE TEMPORARY TABLE tmp1(id varchar(100),name varchar(20),parentid varchar(100),levv int);

CREATE TEMPORARY TABLE tmp2(pid varchar(100));

insert tmp2 select parentid from test where id=idd;

insert tmp1 select t.* , lev from test t join tmp2 a on t.id=a.pid;

while exists(select 1 from tmp2 )

do

truncate tmp2;

set lev=lev+1;

insert tmp2 select t.id from test t join tmp1 a on t.id=a.parentid and a.levv=lev-1;

insert tmp1 select t.*,lev from test t join tmp2 a on t.id=a.pid;

end while ;

select id,name,parentid from tmp1;

end;

$$

delimiter ;

call usp_ser('c877b7ea-4ed3-f472-9527-53e1618cb1dc');

+--------------------------------------+----------+--------------------------------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值