mariadb CTE示例

                                       mariadb CTE示例

mariadb 自10.2.1支持CTE,至10.2.2后支持递归式CTE。Common Table Expression通用表达式简称CTE即类似于一个临时表,可以引用子查询里的结果集。

 

代码部分:

CREATE TABLE `treenodes` (
  `seq` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增序列',
  `id` int(11) NOT NULL COMMENT '序号',
  `pid` int(11) DEFAULT NULL COMMENT '父序号',
  `text` varchar(4000) DEFAULT '文本内容',
  PRIMARY KEY (`seq`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO treenodes VALUES('1','1','0','张氏');
INSERT INTO treenodes VALUES('2','2','0','李氏');
INSERT INTO treenodes VALUES('3','3','1','张三1');
INSERT INTO treenodes VALUES('4','4','1','张三2');
INSERT INTO treenodes VALUES('5','5','2','张三3');
INSERT INTO treenodes VALUES('6','6','3','张三1后');
INSERT INTO treenodes VALUES('7','7','4','张三2后1');
INSERT INTO treenodes VALUES('8','8','4','张三2后2');
INSERT INTO treenodes VALUES('9','9','5','张三3后');


-- 普通CTE
WITH CTE AS
(
SELECT * FROM treenodes WHERE id=1
UNION
SELECT * FROM treenodes WHERE id=2
)
SELECT * FROM CTE

/*
seq	id	pid	text
1	1	0	张氏
2	2	0	李氏
*/

-- 递归式CTE(检索id为1的所有子孙)
WITH recursive cte AS (
SELECT * FROM treenodes WHERE id=1
UNION ALL
SELECT T.* FROM treenodes T JOIN cte ON T.pid=cte.id
)
SELECT * FROM CTE;

/*
seq	id	pid	text
1	1	0	张氏
3	3	1	张三1
4	4	1	张三2
6	6	3	张三1后
7	7	4	张三2后1
8	8	4	张三2后2
*/

执行结果:

见代码处注释

你可能感兴趣的:(数据库)