首页 > 数据库 >Mysql查询父、子节点

Mysql查询父、子节点

时间:2023-04-27 17:46:21浏览次数:35  
标签:25 04 cfg region 09 查询 Mysql 节点 id

一、概述

相信大家在实际的开发工程中,都会遇到需要依据当前节点,查询出其上级节点或下级节点的需求。下面就我在工作过程中的处理方式记录如下,如有片面之处,欢迎批评指正。

二、示例表结构

初始表数据如图:
image

查看表结构和初始数据脚本
DROP TABLE IF EXISTS `t_cfg_region`;
CREATE TABLE `t_cfg_region` (
  `region_id` bigint NOT NULL AUTO_INCREMENT COMMENT '空间编号',
  `region_name` varchar(100) NOT NULL COMMENT '空间名称',
  `up_region_id` bigint NOT NULL COMMENT '父空间编号',
  `region_level` tinyint NOT NULL COMMENT '级别',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  `remark` varchar(512) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`region_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=24764 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_cfg_region
-- ----------------------------
INSERT INTO `t_cfg_region` VALUES ('24741', '江苏省', '0', '1', '2023-04-25 09:30:42', '2023-04-25 09:30:42', null);
INSERT INTO `t_cfg_region` VALUES ('24742', '南京', '24741', '2', '2023-04-25 09:34:54', '2023-04-25 09:34:54', null);
INSERT INTO `t_cfg_region` VALUES ('24743', '苏州', '24741', '2', '2023-04-25 09:35:16', '2023-04-25 09:35:16', null);
INSERT INTO `t_cfg_region` VALUES ('24744', '秦淮区', '24742', '3', '2023-04-25 09:37:13', '2023-04-25 09:37:13', null);
INSERT INTO `t_cfg_region` VALUES ('24745', '吴中区', '24743', '3', '2023-04-25 09:38:00', '2023-04-25 09:38:00', null);

三、查父节点

通过秦淮区查询父节点
image

select
tmpId as region_id
from
(
    SELECT t.* from (
	select
	@r as tmpId,
	(select @r := up_region_id from t_cfg_region where region_id = tmpId) as parentId
	from
	(select @r := 24744,@l := 0) tp,t_cfg_region cg
	where @r != 0
    ) t where t.parentId is not NULL
) tb;

四、查子节点

查询南京的下级节点
image

select r.region_id,r.region_name,r.up_region_id,r.region_level
from
t_cfg_region as r
inner join
(
		SELECT region_id FROM
		(
		SELECT  t1.region_id,t1.up_region_id,
		IF (find_in_set(up_region_id, @pids) > 0,@pids := concat(@pids, ',', region_id),0) AS ischild
		FROM
		(
		SELECT region_id,up_region_id FROM t_cfg_region t ORDER BY  up_region_id,region_id
		) t1,
		(
		SELECT
		@pids := '24741'
		) t2
		) t3
		WHERE
		ischild != 0
		union all
		select region_id from t_cfg_region where region_id = '24741'
) as tp on r.region_id = tp.region_id

标签:25,04,cfg,region,09,查询,Mysql,节点,id
From: https://www.cnblogs.com/z-k47/p/17359763.html

相关文章

  • MySQL - SQL语句增加字段/修改字段/修改类型/修改默认值
    1.添加字段,比如我在数据表中添加一个age字段,类型为int(11)ALTERTABLEplayerADDCOLUMNageint(11);2.修改字段名,将age字段改成player_ageALTERTABLEplayerRENAMECOLUMNagetoplayer_age3.修改字段的数据类型,将player_age的数据类型设置为float(3,1)ALT......
  • Oracle查询语句报ORA-01772: 无效数字
    所需字段类型为数字:selectfirst_minutefrombphs.GW_PREGNANT;--其中"first_minute"字段的类型为:number想在目标字段值为空时,用指定字符代替,此时会报错“ORA-01772:无效数字”:selectnvl(first_minute,'aa')frombphs.GW_PREGNANT;--ORA-01772:无效数字解决......
  • 聚合,分组,F,Q查询
    目录小知识点*号打散redirect重定向小知识点*号打散列表字典或则元组前面加*号相当于作用是将列表解开成两个独立的参数,传入函数,还有类似的有两个星号,是将字典解开成独立的元素作为形参。a=[1,2,3]b=(1,2,3)c={1:“a”,2:“b”,3:“c”}print(a,"",*a)print(b,"",*b)prin......
  • JDBC使用List和Map键值封装多表查询结果 java JDBC insert查询返回List对象
    JDBC使用List和Map键值封装多表查询结果https://www.cnblogs.com/zengyu1234/p/15451812.html查询结果的处理Java.sql.ResultSet接口是jdbcAPI中唯一用来封装查询结果记录行的组件。ResultSet接口唯一创建方式是通过执行SQL查询返回创建此对象 遍历结果集中数据truenext......
  • 查询出数据库中char型字段的最大值,查出数据库中字段最大值,max,缺少列,xh...
    SELECTmax(cast(xhasint))asxhFROMkk.kkcltj用cast(xhasint)把varchar(2)的类型转成int后再查出最大值注意:xh的字段里只能存储char型或number型数据,否则会报无效符号错误有时候不主意会写成SELECTmax(cast(xhasint))FROMkk.kkcltj这样select出来的值就没有......
  • DataX-在Windows上实现postgresql同步数据到mysql
    场景DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130330353在上面实现sqlserver到mysql的数据同步之后,如果要实现postgresql到mysql数据同步流程一样。以PostGis中的OGC元数据......
  • Linux安装Mysql5.7
    前言:还是和以前一样,linux安装软件的目录都是data目录1.进入data目录,创建mysql目录并进入该目录cd/datamkdirmysqlcdmysql 2.删除默认配置,不推荐rm-rf rm/etc/my.cnfy 3.上传"mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz"文件到当前目录(/data/mysql)"m......
  • mysql字段类型json更新
    updatetbl_testsettest_json=JSON_REPLACE(test_json,'$."jsonFieldName"',(CAST(test_json->'$."jsonFieldName"'ASSIGNEDINTEGER)-70*365-19)*86400-3600*8)wheret......
  • Chrome devTools--节点监听
    节点监听dombreakpoints:子节点修改/属性修改/节点移除子节点修改适用场景:当鼠标移入下拉框时,下拉选项出现,想要选中下拉选项dom,修改下拉选项的dom时,却又消失了解决方案:选中body节点,监听dom字节点的修改,Breakon---》subtreemodifications,下拉选项触发时进入debugger 节......
  • MySQL锁机制详解-表锁与行锁
    转、MySQL锁机制详解-表锁与行锁https://blog.csdn.net/huangjhai/article/details/119011417  转:什么是线程死锁?如何避免死锁? 相互强占彼此资源,导致彼此等待。线程挂起 阻塞......