首页 > 其他 > 详细

根据父节点编号查询子节点名称,孙节点个数

时间:2019-07-11 19:15:57      阅读:126      评论:0      收藏:0      [点我收藏+]

新建一个部门表

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 标识列,
  `name` varchar(255) NOT NULL COMMENT 名称,
  `pid` int(11) NOT NULL COMMENT 父级编号,
  `num` int(11) NOT NULL DEFAULT 100 COMMENT 排序号,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT=部门表;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES (1, 总部, 0, 100);
INSERT INTO `dept` VALUES (2, 市场, 1, 100);
INSERT INTO `dept` VALUES (3, 研发, 1, 100);
INSERT INTO `dept` VALUES (4, 财务, 1, 100);
INSERT INTO `dept` VALUES (5, 设计, 3, 100);
INSERT INTO `dept` VALUES (6, 运维, 3, 100);
INSERT INTO `dept` VALUES (7, 测试, 3, 100);
INSERT INTO `dept` VALUES (8, 开发, 3, 100);
INSERT INTO `dept` VALUES (9, 人事, 1, 100);
INSERT INTO `dept` VALUES (10, 行政, 1, 100);
INSERT INTO `dept` VALUES (11, 营销, 2, 100);
INSERT INTO `dept` VALUES (12, 策划, 2, 100);
INSERT INTO `dept` VALUES (13, 售后, 2, 100);
INSERT INTO `dept` VALUES (14, Java, 8, 100);
INSERT INTO `dept` VALUES (15, 大数据, 8, 100);
INSERT INTO `dept` VALUES (16, .Net, 8, 100);
INSERT INTO `dept` VALUES (17, 美工, 5, 100);
INSERT INTO `dept` VALUES (18, 前端, 5, 100);

顶级的pid的值为0

技术分享图片

 

需求是根据父节点编号查询子节点名称及其孙节点个数:要求一条sql语句完成

-- 根据父节点编号,查询子节点名称,及其孙节点个数
        SELECT
            id,
            dept1.pid,
            name,
            ifnull(children,0) children
FROM ( SELECT
            id,
            pId,
            name
from dept
where pid = 3 ) dept1
LEFT JOIN (SELECT pid,count(*) children FROM dept 
where pid in (SELECT id FROM dept where pid = 3)
GROUP BY pid) dept2
on dept1.id = dept2.pid

 

技术分享图片

 

根据父节点编号查询子节点名称,孙节点个数

原文:https://www.cnblogs.com/liuxiutianxia/p/11171847.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!