mysql数据库递归访问数据-程序员宅基地

技术标签: mysql  数据库  数据库(DataBase)  sql  

目录

1、背景

2、创建函数queryAllParentIds(inputId VARCHAR(32))

2.1、创建函数

2.2、函数测试

 2.3、结果验证

3、创建函数queryLongName(inputId VARCHAR(32))

3.1 创建函数

3.2 函数验证


1、背景

现在有一张行政区表,表结构如下:
 

CREATE TABLE `t_addr` (
  `id` varchar(255) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `p_id` varchar(255) DEFAULT NULL,
  `addr_level` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 需求如下:根据知道某一个指定的Id所有的上级信息

2、创建函数queryAllParentIds(inputId VARCHAR(32))

2.1、创建函数

DROP FUNCTION IF EXISTS queryAllParentIds;
DELIMITER;;
CREATE FUNCTION queryAllParentIds(inputId VARCHAR(32))
RETURNS VARCHAR(4000)
BEGIN
DECLARE allParentIds VARCHAR(4000);
DECLARE tempParentId VARCHAR(32);
DECLARE tempId VARCHAR(32);
SET tempId = inputId;
SET allParentIds = '\'$\'';
SELECT p_id INTO tempParentId FROM t_addr WHERE id = tempId limit 1;
 
WHILE tempParentId <> '0' DO
  SET allParentIds = CONCAT(allParentIds,',','\'',tempParentId,'\'');
  SELECT p_id INTO tempParentId  FROM t_addr WHERE id = tempParentId;
END WHILE;

RETURN allParentIds;
END
;;
DELIMITER ;
 

2.2、函数测试

 2.3、结果验证

3、创建函数queryLongName(inputId VARCHAR(32))

3.1 创建函数

DROP FUNCTION IF EXISTS queryLongName;
DELIMITER;;
CREATE FUNCTION queryLongName(inputId VARCHAR(32))
RETURNS VARCHAR(4000)
BEGIN
DECLARE longName VARCHAR(4000);
DECLARE tempParentId VARCHAR(32);
DECLARE tempName VARCHAR(32);
DECLARE tempId VARCHAR(32);
SET tempId = inputId;

SELECT p_id,name into @tempParentId,@tempName FROM t_addr WHERE id = tempId limit 1;
 SET longName = @tempName;
WHILE @tempParentId <> '0' DO

  SELECT p_id,name  into @tempParentId,@tempName FROM t_addr WHERE id = @tempParentId;
 
	SET longName = CONCAT(@tempName,'->',longName );
END WHILE;

RETURN longName;
END
;;
DELIMITER ;

3.2 函数验证

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/s2008100262/article/details/127167226

智能推荐

mybatis中的存储过程_mybatis中的存储过程怎么定义-程序员宅基地

这里只强调下存储过程如何编写,其调用过程可以通过将其参数构建成一个类,来进行通常使用存储过程示例:createor replace procedureName(param1 in varchar,param2 outvarchar,params3out date)ISBEGINselect count(*) into param2 from t_role where role_n..._mybatis中的存储过程怎么定义

[指南]-DeepFaceLab 2.0说明和教程(推荐)_mrdeepfakes-程序员宅基地

DeepFaceLab 2.0指南/教程此教程机翻自:https://mrdeepfakes.com/forums/thread-guide-deepfacelab-2-0-explained-and-tutorials-recommended什么是DeepFaceLab 2.0?DeepFaceLab 2.0是利用机器学习来交换视频中人脸的工具/应用程序。1.0和2.0有什么区别?DFL 2.0有什么新功能?DFL 2.0的核心与1.0非常相似,但是对它进行了重写和优..._mrdeepfakes

Nexus5 刷机_nexus5刷机_ST0new的博客-程序员宅基地

Nexus 5 刷机一、检查手机是否解锁电脑有adb,手机开启开发者模式,有USB调试adb reboot bootloader或者在关机状态下,按住开机键和音量下键进入bootloader模式如果未解锁请继续,解锁请跳到第二节 查看刷机过程首先在手机上打开开发者模式,然后打开USB调试进入到bootloader模式(参考上面的命令)打开命令行,输入fastboot flashing unlock然后选择YES 按电源键确认二 、刷机刷机前先做一些准备下载刷机工具电脑没有_nexus5刷机

POI 替换word文档书签_hwpfdocument pom-程序员宅基地

word按照版本为两种:doc和docx,POI针对这两种操作需要不同的API:doc操作使用HWPFDocument,替换思想就是找到书签的起止位置,对范围内的文本进行替换:public static void docOperate(InputStream inputStream,OutputStream outputStream, ..._hwpfdocument pom

Java8【参考】Future模式之CompletableFuture-程序员宅基地

转载:https://www.liangzl.com/get-article-detail-97192.htmlCompletableFuture 是Java 8 新增加的Api,该类实现,Future和CompletionStage两个接口,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合C...

LINUX下GDB反汇编和调试-程序员宅基地

Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数,而Windows下却是相反。1、 基本操作指令简单的操作数类型说明,一般有三种,(1)立即数操作数,也就是常数值。立即数的书写方式是“$”后面跟一个整数,比如$0x1F,这个会在后面的具体分析中见到很多。(2)寄存器操作数,它表示某个寄存器的内容,用符号Ea来表示任意寄存器a,用引用R[

随便推点

在word中怎么实现奇数页页眉用本章标题,偶数页用论文标题?_单数页眉为题目,双数页眉为章标题怎么弄-程序员宅基地

前提:标题为一级标题,且标题的序号是在自动编号的那种1.先设置奇偶页不同2.将光标定位在奇数页页眉处,插入“文档部件”中的“域”3.选择“链接和引用”下的“StyleRef”,选中“标题1”,点击确定,奇数页眉就设置完毕4. 偶数页眉:将光标定位在偶数页页眉处,输入论文标题即可..._单数页眉为题目,双数页眉为章标题怎么弄

Fix "Could not find file AppManifest.xaml" issue-程序员宅基地

习惯了英文来写,还是用英文了。 I got an issue when I build my silverlight project. I got an error "Could not find file AppManifest.xaml".I tried to figure it out as follows:1. Clean solution2. Go to "Obj"_appmanifest

截止失真放大电路_音频功放失真?别急!这里有常见改善方法-程序员宅基地

无论是电失真还是声失真,按失真的性质来分,主要有频率失真和非线性失真两种。其中,引起信号各频率分量间幅度和相位的关系变化,仅出现波形失真,不增加新的频率成分,属于线性失真。而谐波失真(THD)、互调失真(IMD)等可产生新的频率成分,或各频率分量的调制产物,这些多余产物与原信号极不和谐,引起声音畸变,粗糙刺耳,这些失真属于非线性失真。在这里,我们分别对谐波失真、互调失真、瞬态互调失真(T...

ERP专业知识讲座:17.ERP项目的实施监理 _erp行业知识分享大会-程序员宅基地

实施ERP与项目监理的关系实际上是一种很明确的依赖关系。假如一个企业应用实施ERP系统但没有很好地进行项目监理的话,那么,实施的效果就会大打折扣。一般来讲,由于以下几个原因,应用ERP系统需要实施项目监理: 企业在此之前没有实施大型管理系统的经验; ERP系统将涉及到企业各个业务管理部门; ERP系统的实施周期一般会在半年到两年之间。 所以,从注重ERP系统的实施效果出发,企业必须认真考虑项目实施_erp行业知识分享大会

猫猫学iOS之小知识iOS启动动画_Launch Screen的运用_lauch screen 是用什么软件做-程序员宅基地

猫猫分享,必须精品原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents看下效果吧例如新浪微博的软件开启时候 就是这个用Launch image实现这个不难,就是在Images.xcassets 增加一个LaunchImage文件(右键 new launch image) 然后把需要的素材放_lauch screen 是用什么软件做

Windows10共享文件夹到ubuntu系统_如何把共享文件夹传到ubuntu-程序员宅基地

共享windows的文件夹到linux环境中调用,需要在windows10系统中设置文件共享,并从Ubuntu系统中执行挂在,并且设置读写权限。_如何把共享文件夹传到ubuntu