MySQL-树型结构数据查询

建表

在这里插入图片描述

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for treetest
-- ----------------------------
DROP TABLE IF EXISTS `treetest`;
CREATE TABLE `treetest`  (
  `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
  `pid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '父id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '名字'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of treetest
-- ----------------------------
INSERT INTO `treetest` VALUES ('t1', NULL, '根节点');
INSERT INTO `treetest` VALUES ('t2', 't1', '一级节点A');
INSERT INTO `treetest` VALUES ('t3', 't1', '一级节点B');
INSERT INTO `treetest` VALUES ('t4', 't2', '二级节点C');
INSERT INTO `treetest` VALUES ('t5', 't2', '二级节点D');
INSERT INTO `treetest` VALUES ('t6', 't3', '二级节点E');
INSERT INTO `treetest` VALUES ('t7', 't3', '二级节点F');
INSERT INTO `treetest` VALUES ('t8', 't4', '三级节点G');
INSERT INTO `treetest` VALUES ('t9', 't8', '四级节点H');
INSERT INTO `treetest` VALUES ('tA', NULL, '根节点');
INSERT INTO `treetest` VALUES ('tB', 'tA', '一级节点1');

SET FOREIGN_KEY_CHECKS = 1;

自顶向下

在这里插入图片描述

WITH RECURSIVE temp as (
	SELECT t.* FROM treetest t WHERE t.id = 'tA'
	UNION ALL
	SELECT t.* FROM treetest t INNER JOIN temp ON t.pid = temp.id
)
SELECT * FROM temp

自底向上

  • 方法一
    在这里插入图片描述
WITH RECURSIVE temp as (
	SELECT t.* FROM treetest t WHERE t.id = 't9'
	UNION ALL
	SELECT t.* FROM treetest t INNER JOIN temp ON t.id = temp.pid
)
SELECT * FROM temp
  • 方法二
    在这里插入图片描述
SELECT
	* 
FROM
	(
	SELECT
		@r AS oid,
		( SELECT @r := pid FROM treetest WHERE id = oid ) AS pid,
		@l := @l + 1 AS sort 
	FROM
		( SELECT @r := 't9', @l := 0 ) vars,
		treetest h 
	) t 
WHERE
	t.oid IS NOT NULL 
ORDER BY
	t.sort ASC

这里加()t这一层是因为最后的@rNull,条件筛选都是此值,会导致筛选失效
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是魏老师啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值