mysql 树表查询所有子节点
程序员文章站
2022-03-11 16:49:31
前言使用 find_in_set 函数可以实现该功能表结构假设有部门表如下:CREATE TABLE IF NOT EXISTS `sys_dept` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id', `parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id', `ancestors` varchar(50) DEFAULT '' COMMENT '祖级列表', `na...
前言
- 使用 find_in_set 函数可以实现该功能
表结构
- 假设有部门表如下:
CREATE TABLE IF NOT EXISTS `sys_dept` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门id',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父部门id',
`ancestors` varchar(50) DEFAULT '' COMMENT '祖级列表',
`name` varchar(30) DEFAULT '' COMMENT '部门名称',
`order_num` int(4) DEFAULT '0' COMMENT '显示顺序',
`leader` varchar(20) DEFAULT NULL COMMENT '负责人',
`phone` varchar(11) DEFAULT NULL COMMENT '联系电话',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`status` char(1) DEFAULT '0' COMMENT '部门状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
`create_userid` bigint(20) DEFAULT NULL COMMENT '创建者,user表id',
`create_username` varchar(64) DEFAULT '' COMMENT '创建者,user表name,冗余',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_userid` bigint(20) DEFAULT NULL COMMENT '更新者,user表id',
`update_username` varchar(64) DEFAULT '' COMMENT '更新者,user表name,冗余',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='部门表' AUTO_INCREMENT=105 ;
数据示例
INSERT INTO `sys_dept`
(`id`, `parent_id`, `ancestors`, `name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`)
VALUES
(100, 0, '0', 'xx公司', 0, '张三', '15888888888', 'xxx@xx.com', '0', '0'),
(101, 100, '0,100', '财务部', 1, NULL, NULL, NULL, '0', '0'),
(102, 100, '0,100', '办公室', 2, NULL, NULL, NULL, '0', '0'),
(103, 100, '0,100', '销售1部', 3, NULL, NULL, NULL, '0', '0'),
(104, 103, '0,100,103', '销售1部1科', 1, NULL, NULL, NULL, '0', '0');
查询id=100的部门的所有子部门
select *
from `sys_dept`
where FIND_IN_SET('100',ancestors)
运行结果
查询id=103的部门的子部门
select *
from `sys_dept`
where FIND_IN_SET('103',ancestors)
运行结果
参考
https://www.cnblogs.com/xiaoxi/p/5889486.html
本文地址:https://blog.csdn.net/sayyy/article/details/107637892
上一篇: MySQL数据库的19个常用命令
下一篇: MySQL构建百万级数据