MySQL - WITH RECURSIVE AS 递归查询
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - WITH RECURSIVE AS 递归查询相关的知识,希望对你有一定的参考价值。
开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用mysql数据库,版本为8.0
- Oracle数据库中可使用START [Param] CONNECT BY PRIOR
- Mysql 中需要使用 WITH RECURSIVE
抛砖引玉
-- 计算1到100的累加的结果
WITH RECURSIVE t(n) AS ( -- t 为我们结果表,n 为字段,可以只指定表名不指定字段
SELECT 1 n -- 递归的开始,此时可理解为 t 表字段 n 只有一条记录 1
UNION ALL
SELECT n + 1 FROM t WHERE n < 100
/* 这里产生的结果为 2 ,此时 t 表的字段 n 有两条记录分别为 1,2
* 3
* ...
* 100
*/
)
SELECT SUM(n) FROM t;
元素据
为了方便大家验证,提前准备好表结构和逻辑数据
/*
Navicat MySQL Data Transfer
Source Server : MySQL
Source Server Version : 50720
Source Host : localhost:3306
Source Database : db_demo
Target Server Type : MYSQL
Target Server Version : 50720
File Encoding : 65001
Date: 2021-11-25 18:46:10
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_family
-- ----------------------------
DROP TABLE IF EXISTS `t_family`;
CREATE TABLE `t_family` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`pid` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_family
-- ----------------------------
INSERT INTO `t_family` VALUES ('1', '王五', '0');
INSERT INTO `t_family` VALUES ('2', '王五儿子', '1');
INSERT INTO `t_family` VALUES ('3', '王五孙子', '2');
INSERT INTO `t_family` VALUES ('4', '赵六', '0');
INSERT INTO `t_family` VALUES ('5', '赵六儿子', '4');
INSERT INTO `t_family` VALUES ('6', '赵六孙子', '5');
以上是关于MySQL - WITH RECURSIVE AS 递归查询的主要内容,如果未能解决你的问题,请参考以下文章