六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

MySQL對于遞歸的一個問題

[摘要]這篇文章主要介紹了MySQL之遞歸小問題,需要的朋友可以參考下mysql本身不支持遞歸語法,但可通過自連接變相實現(xiàn)一些簡單的遞歸--遞歸小方法:臨時表和普通表的不同方法--這題使用的是2次臨時表查詢父節(jié)點的遞歸 drop table if exists test;create table test...
這篇文章主要介紹了MySQL遞歸小問題,需要的朋友可以參考下

mysql本身不支持遞歸語法,但可通過自連接變相實現(xiàn)一些簡單的遞歸

--遞歸小方法:臨時表和普通表的不同方法
--這題使用的是2次臨時表查詢父節(jié)點的遞歸 

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', '大學(xué)教師', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select 
'1ce203ac-ee34-b902-6c10-c806f0f52876','小學(xué)教師', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select 
'37e2ea0a-1c31-3412-455a-5e60b8395f7d', '教師' ,      null                union all select 
'c877b7ea-4ed3-f472-9527-53e1618cb1dc', '高數(shù)老師', '13ed38f1-3c24-dd81-492f-673686dff0f3' union all select 
'ce50a471-2955-00fa-2fb7-198f6b45b1bd', '中學(xué)教師', '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');
+--------------------------------------+----------+--------------------------------------+
  id                    name     parentid                
+--------------------------------------+----------+--------------------------------------+
  13ed38f1-3c24-dd81-492f-673686dff0f3   大學(xué)教師   37e2ea0a-1c31-3412-455a-5e60b8395f7d  
  37e2ea0a-1c31-3412-455a-5e60b8395f7d   教師     NULL                  
+--------------------------------------+----------+--------------------------------------+
 
 call usp_ser('13ed38f1-3c24-dd81-492f-673686dff0f3');
+--------------------------------------+------+----------+
  id                    name   parentid  
+--------------------------------------+------+----------+
  37e2ea0a-1c31-3412-455a-5e60b8395f7d   教師   NULL    
+--------------------------------------+------+----------+
 
 call usp_ser('37e2ea0a-1c31-3412-455a-5e60b8395f7d');
 
Empty set (0.02 sec)

上面的方法因為由于MySQL中不允許在同一語句中對臨時表多次引用,所以用2次臨時表
下面給個一次性用普通表完成的 查詢子節(jié)點的遞歸查詢

核心代碼

drop table if exists test;
create table test(
id INT,
parentid INT
);
insert test select
1, 0 UNION ALL SELECT 
2, 1 UNION ALL SELECT 
3, 1 UNION ALL SELECT 
4, 0 UNION ALL SELECT 
5, 2 UNION ALL SELECT 
6, 5 UNION ALL SELECT 
7, 3 ;
Go
 
delimiter $$
 
create procedure usp_ser(in idd varchar(100))
begin
declare lev int;
set lev=1;
drop table if exists tmp1;
CREATE TABLE tmp1(id INT,parentid INT ,levv INT,ppath VARCHAR(1000));

INSERT tmp1 SELECT *,lev,id FROM test WHERE parentid=idd;

 while row_count()>0
do

set lev=lev+1;
insert tmp1 select t.*,lev,concat(a.ppath,t.id) from test t join tmp1 a on t.parentid=a.id AND levv=LEV-1;
 
end while ;
SELECT * FROM tmp1;
 
end;
$$
 
delimiter ;
 
 call usp_ser(0);
 
/*
+------+----------+------+-------+
  id    parentid   levv   ppath  
+------+----------+------+-------+
   1      0    1   1    
   4      0    1   4    
   2      1    2   12   
   3      1    2   13   
   5      2    3   125   
   7      3    3   137   
   6      5    4   1256  
+------+----------+------+-------+*/

以上就是MySQL關(guān)于遞歸的一個問題的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 青青青青青青青青草 | 亚洲综合视频在线观看 | 日韩视频中文字幕专区 | 日本中文字幕在线 | 亚洲 成人 欧美 自拍 | 日韩亚洲一区二区三区 | 中文字幕免费高清视频 | 欧美性插视频 | 欧美整片在线 | 三级在线经典三级 | 伊人免费在线观看 | 亚洲影视大全 | 午夜影视在线视频观看免费 | 日韩视频在线免费 | 色偷偷91综合久久噜噜 | 日本亚洲欧美国产日韩ay高清 | 亚洲免费一| 亚洲91视频| 天堂а√中文在线 | 亚洲欧美日韩国产色另类 | 日日做日日摸夜夜爽 | 色综合久久久久久久久五月 | 日韩一级一欧美一级国产 | 天堂网中文 | 天天色综合影视 | 日日摸夜夜添夜夜添成人 | 天天干夜夜怕 | 日韩资源在线 | 添人人躁日日躁夜夜躁夜夜揉 | 亚洲狼网站狼狼鲁亚洲下载 | 日操夜操 | 青青青免费观看在线视频高清 | 日本视频一区二区 | 亚洲狼网站狼狼鲁亚洲下载 | 亚洲小视频网站 | 欧美专区在线观看 | 青青青免费观看在线视频高清 | 天天色天天色 | 在线小视频国产 | 午夜影皖 | 欧美亚洲国产精品久久第一页 |