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

BEGIN
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
时间: 2024-08-07 21:18:22

MySQL 拼接表名递归寻找子节点和父节点的相关文章

关于mysql的表名/字段名/字段值是否区分大小写的问题

http://www.2cto.com/database/201202/121253.html 1.mysql默认情况下是否区分大小写,使用show Variables like '%table_names'查看lower_case_table_names的值,0代表区分,1代表不区分. 2.mysql对于类型为varchar数据默认不区分大小写,但如果该字段以“*_bin”编码的话会使mysql对其区分大小写. 3.mysql对于字段名的策略与varchar类型数据相同.即:默认不区分大小写,

SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数

---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ID] Int, fatherID Int, [Name] Varchar(10))Insert A Select 1, 0, '中国'Union All Select 2, 1, '广东'Union All Select 3, 1, '北京'Union All Select 4, 2, '深圳特区

二叉树递归与非递归遍历,最近公共父节点算法

#include <iostream> #include <stack> using namespace std; #define MAX 100 //字符串最大长度 typedef struct Node //二叉树结点 { char data; Node *lchild,*rchild; } *Btree; void createBT(Btree &t); //先序构造二叉树 void preorder(Btree &t); //二叉树递归先序遍历 void i

JS获取子节点、父节点和兄弟节点的方法实例总结

JS获取子节点.父节点和兄弟节点的方法实例总结 原生js 参考网址 Jquery 参考网址 原文地址:https://www.cnblogs.com/renxiuxing/p/10180558.html

Oracle树查询(查询所有子节点,父节点等等)_转载

Oracle树查询(查询所有子节点,父节点等等) 转载 2016年01月14日 10:11:55 Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了.依托于该语法,我们可以将一个表形结构的中以树的顺序列出来.在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等,在这里只涉及到一张表中的树查询方式而不涉及多表中的关联等. 以我做过的一个项目中的表为例,表结构如下: Sql代码 1

windows下mysql数据库表名大小写不敏感

最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题,就仔细看代码,看看有没有什么不合理的地方,然后在提交,还是500.然后又看,又提,依然是500.很不解啊,只有问领导了,领导说,是线上mysql字段设置了大小写敏感,遂改之,结果还是500.领导再一看,我靠了,表名应该是首字母大写的,但是我本地是小写. 大坑啊.原来开发创建的表都是小写的,所以原来

Linux系统下不让MySQL区分表名的大小写的解决办法

问题描述: 今天将某项目数据库移植到liunix服务器上,结果出现无法找到表的错误,查询数据库,表确实是存在的.经过分析比较,发现是表名大小写问题导致. 问题分析: MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误. 解决办法: 修改MySQL的配置文件my.cnf,在[mysqld]部分添加如下配置选项lower_case_table_names =

【mark】centos下,更改mysql数据库表名大小写敏感

Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:root登录,修改/etc/my.cnf,在末尾添加一行:lower_case_table_names=1lower_case_table_names参数: 0为敏感,1为不敏感. MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名是严格区分大小写的:2.表的别名是严格区分大小写的:3.列名与列的别名在所有的情况下均是忽略大小写的:4.变量名也是严格区分大小写的: *如果之前已经创建

Linux下Mysql的表名大小写敏感引起数据库操作失败

今天处理了一个奇怪的问题,现象如下: 1.  Linux下安装了Mysql,导入数据库表,一切正常: 2.  Spring+Myibatis连接数据库正常: 3.  当执行数据库查询的时候,抛出如下异常: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Ta