最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL之遞歸小問題

 更新時(shí)間:2017年05月20日 14:04:32   投稿:mdxy-dxy  
這篇文章主要介紹了MySQL之遞歸小問題,需要的朋友可以參考下

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

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

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)

上面的方法因?yàn)橛捎贛ySQL中不允許在同一語句中對(duì)臨時(shí)表多次引用,所以用2次臨時(shí)表
下面給個(gè)一次性用普通表完成的 查詢子節(jié)點(diǎn)的遞歸查詢

核心代碼

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 |
+------+----------+------+-------+*/

相關(guān)文章

  • 利用MySQL?Shell安裝部署MGR集群的詳細(xì)過程

    利用MySQL?Shell安裝部署MGR集群的詳細(xì)過程

    MySQL?Shell是一個(gè)客戶端工具,可用于方便管理和操作MySQL,支持SQL、JavaScript、Python等多種語言,也包括完善的API,本文介紹如何利用MySQL?Shell?+?GreatSQL?8.0.25構(gòu)建一個(gè)三節(jié)點(diǎn)的MGR集群,感興趣的朋友一起看看吧
    2022-02-02
  • MySQL5.7.21安裝與密碼圖文配置教程

    MySQL5.7.21安裝與密碼圖文配置教程

    這篇文章主要為大家詳細(xì)介紹了MySQL5.7.21安裝與密碼圖文配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • MySQL遠(yuǎn)程連接不上的解決方法

    MySQL遠(yuǎn)程連接不上的解決方法

    這篇文章主要為大家詳細(xì)介紹了MySQL遠(yuǎn)程連接不上的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mysql中的臨時(shí)表如何使用

    mysql中的臨時(shí)表如何使用

    這篇文章主要介紹了mysql中的臨時(shí)表如何使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • mysql 5.6 壓縮包版安裝方法

    mysql 5.6 壓縮包版安裝方法

    這篇文章主要為大家詳細(xì)介紹了mysql 5.6 壓縮包版安裝方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實(shí)例

    mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實(shí)例

    mysql在5.7開始支持json解析了,也可以解析數(shù)組,下面這篇文章主要給大家介紹了關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 在EF中使用MySQL的方法及常見問題

    在EF中使用MySQL的方法及常見問題

    這篇文章主要介紹了在EF中使用MySQL的方法及常見問題 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Mysql逗號(hào)拼接字符串的關(guān)聯(lián)查詢以及統(tǒng)計(jì)問題

    Mysql逗號(hào)拼接字符串的關(guān)聯(lián)查詢以及統(tǒng)計(jì)問題

    有時(shí)為了數(shù)據(jù)庫簡潔,存放數(shù)據(jù)的時(shí)候,某一字段采用逗號(hào)隔開的形式進(jìn)行存儲(chǔ),下面這篇文章主要給大家介紹了關(guān)于Mysql逗號(hào)拼接字符串的關(guān)聯(lián)查詢以及統(tǒng)計(jì)問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • mysql如何查詢?nèi)掌谂c時(shí)間

    mysql如何查詢?nèi)掌谂c時(shí)間

    這篇文章主要介紹了mysql如何查詢?nèi)掌谂c時(shí)間,幫助大家更好的理解和學(xué)習(xí)mysql,感興趣的朋友可以了解下
    2020-08-08
  • DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL(Data?Query?Language,數(shù)據(jù)查詢語言),查詢數(shù)據(jù)庫數(shù)據(jù),如SELECT語句,簡單的單表查詢或多表的復(fù)雜查詢和嵌套查詢,數(shù)據(jù)庫語言中最核心、最重要的語句,使用頻率最高的語句
    2022-09-09

最新評(píng)論

上饶市| 霍林郭勒市| 锦州市| 板桥市| 吉林市| 高邑县| 贵州省| 宁明县| 滨州市| 阿尔山市| 竹山县| 鹤岗市| 措勤县| 龙岩市| 嘉黎县| 建阳市| 新密市| 荃湾区| 安远县| 娄底市| 家居| 额尔古纳市| 长春市| 虎林市| 横峰县| 临沭县| 吉隆县| 综艺| 昔阳县| 海伦市| 黑龙江省| 长汀县| 宜兴市| 卓资县| 宁强县| 苏尼特右旗| 射阳县| 城步| 乌审旗| 那曲县| 武穴市|