mysql8.0递归_mysql8.0版本递归查询

本文介绍了如何在MySQL 8.0中使用递归查询,通过创建一个名为`dept`的部门表并填充数据,展示了如何查询根节点为1的所有子部门。文章对比了MySQL与SQL Server的递归查询语句写法,提供了详细的查询示例。
摘要由CSDN通过智能技术生成

1.先在mysql数据库添加数据

DROP TABLE IF EXISTS `dept`;

CREATE TABLE `dept`  (

`id` int(11) NOT NULL,

`pid` int(11) DEFAULT NULL,

`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

`date` datetime(0) DEFAULT NULL,

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------

-- Records of dept

-- ----------------------------

INSERT INTO `dept` VALUES (1, 0, ‘总部门‘, ‘2020-04-16 15:00:54‘);

INSERT INTO `dept` VALUES (2, 1, ‘课程部‘, ‘2020-04-16 15:00:57‘);

INSERT INTO `dept` VALUES (3, 1, ‘爱好部‘, ‘2020-04-16 15:01:01‘);

INSERT INTO `dept` VALUES (4, 1, ‘小吃部‘, ‘2020-04-16 15:01:03‘);

INSERT INTO `dept` VALUES (5, 2, ‘语文‘, ‘2020-04-15 15:01:07‘);

INSERT INTO `dept` VALUES (6, 3, ‘羽毛球‘, ‘2020-04-15 15:01:14‘);

INSERT INTO `dept` VALUES (7, 4, ‘臭豆腐‘, ‘2020-04-15 15:01:18‘);

INSERT INTO `dept` VALUES (8, 4, ‘鸭脖‘, ‘2020-07-11 11:21:29‘);

2.语句查询id为1的所有数据

WITH RECURSIVE cte AS

(

SELECT a.id, a.pid,a.name FROM dept a WHERE a.id=‘1‘

UNION ALL

SELECT k.id, k.pid,k.name FROM dept k INNER JOIN cte c ON c.id = k.pid

)SELECT id,name,pid FROM cte

60767c65a2f89eab56ae161007793a00.png

2.sqlserver 的查询语句写法(当然得在sqlserver数据库中添加数据 并执行语句)

WITH cte AS

(

SELECT a.id, a.pid,a.name FROM dept a WHERE a.id=‘4‘

UNION ALL

SELECT k.id, k.pid,k.name FROM dept k INNER JOIN cte c ON c.id = k.pid

)SELECT id,name,pid FROM cte

原文:https://www.cnblogs.com/atsong/p/13320754.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值