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

明輝手游網(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精品 | 日韩三级在线免费观看 | 日韩乱视频 | 色婷婷久久综合中文久久蜜桃 | 欧美在线一二三 | 日韩一级黄色片 | 午夜影院黄色片 | 日韩系列第一页 | 欧美视频在线播放观看免费福利资源 | 色橹橹欧美在线观看视频高清 | 日本系列第一页 | 一级毛片免费毛片一级毛片免费 | 日韩国产欧美成人一区二区影院 | 在线不卡| 欧美亚洲三级 | 亚洲国产欧美另类 | 日韩一区二区三区在线观看 | 四虎永久在线精品免费影视 | 亚洲最大免费视频网 | 淫片网站| 亚洲视频免费在线播放 | 日本人的一区二区三区四区 | 日本在线视频网 | 日本国产视频 | 三级亚洲 | 天天操天天干天天爽 | 亚洲成a人不卡在线观看 | 色婷婷影院 | 亚州免费视频 | 中文字幕国产 | 亚洲 欧美 中文 日韩专区 | 一级黄色网 | 四虎影院在线 | 中文在线最新版天堂 | 中文字幕1区 | 亚洲免费视频播放 | 亚洲国产精品线播放 | 在线观看亚洲精品专区 |