当前位置:Gxlcms > 数据库问题 > MySQL 拼接表名递归寻找子节点和父节点

MySQL 拼接表名递归寻找子节点和父节点

时间:2021-07-01 10:21:17 帮助过:111人阅读

declare lev int; -- 查询父级 set lev=1; drop table if exists tmp1; CREATE TABLE tmp1(ID VARCHAR(40),Wl_Code varchar(50),ParentCode varchar(40) ,levv INT); -- 用拼接的方式拼接表名和参数 SET @sqlcmd = CONCAT(INSERT tmp1 SELECT ID,Wl_Code,ParentCode,1 FROM ,tablename , WHERE Wl_Code=,wlcode); -- 声明 PREPARE stmt FROM @sqlcmd; -- 执行SQL EXECUTE stmt; -- DEALLOCATE PREPARE stmt; -- SELECT ROW_COUNT(); while row_count()>0 do set lev=lev+1; -- 拼接SQL 和参数 SET @sqlcmd = CONCAT( INSERT tmp1 SELECT t.ID,t.Wl_Code,t.ParentCode,,lev, from ,tablename, t join tmp1 a on t.Wl_Code=a.ParentCode AND levv=,lev-1); PREPARE stmt FROM @sqlcmd; EXECUTE stmt; end while ; -- SELECT DISTINCT ID,Wl_Code,ParentCode FROM tmp1; -- 查询子级 SET lev=1; -- 查询子级 drop table if exists tmp2; CREATE TABLE tmp2(ID VARCHAR(40),Wl_Code varchar(50),ParentCode varchar(40),levv INT); SET @sqlcmd = CONCAT(INSERT tmp2 SELECT ID,Wl_Code,ParentCode,1 FROM ,tablename, WHERE ParentCode=,wlcode); PREPARE stmt FROM @sqlcmd; EXECUTE stmt; while row_count()>0 do set lev=lev+1; SET @sqlcmd = CONCAT(INSERT tmp2 SELECT t.ID,t.Wl_Code,t.ParentCode,,lev, from ,tablename, t join tmp2 a on t.ParentCode=a.Wl_Code AND levv=,lev-1); PREPARE stmt FROM @sqlcmd; EXECUTE stmt; end while ; -- SELECT DISTINCT ID,Wl_Code,ParentCode FROM tmp2; SELECT DISTINCT ID,Wl_Code,ParentCode FROM tmp1 UNION ALL SELECT DISTINCT ID,Wl_Code,ParentCode FROM tmp2 order by ID ; END

 

MySQL 拼接表名递归寻找子节点和父节点

标签:insert   sql   style   ntc   col   arch   tin   class   eal   

人气教程排行