FIND_IN_SET
(
t1
.
parent_id
,
@pids
)
>
0
,
@pids
:
=
CONCAT
(
@pids
,
','
,
t1
.
id
)
,
)
AS ischild
(
SELECT
id
,
parent_id FROM table_name t ORDER
BY
parent_id
,
id
)
t1
,
(
SELECT
@pids
:
=
'16'
)
t2
WHERE
ischild
!=
0
OR
id
=
'16'
此方法,通过FIND_IN_SET找出当前数据的parent_id是否在@pids的满足条件的字符串当中。如果符合,则将当前数据的id加入@pids;否则isChild设置为0。依次往下查询,最终找出isChild不为0的即为满足条件的数据id集合。
-
根据子级ID递归查询所有父级ID
SELECT
t2.id
SELECT
@r AS _id,
( SELECT @r := parent_id FROM table_name WHERE id = _id ) AS parent_id,
@s := @s + 1 AS sort
( SELECT @r := 23, @s := 0 ) temp,
table_name
WHERE
@r > 0
JOIN table_name t2 ON t1._id = t2.id
ORDER BY
t1.sort DESC
补充: sqlite递归查询
<select id="getParentTreeId" parameterType="java.lang.Long" resultType="java.lang.Long">
with recursive cid(n) AS
VALUES (#{id})
UNION
SELECT parent_id FROM table_name, cid
WHERE id = cid.n AND delete_dt = 0
SELECT id FROM table_name
WHERE id IN cid
</select>
<select id="getChildTreeId" parameterType="java.lang.Long" resultType="java.lang.Long">
with recursive pid(n) AS
VALUES (#{id})
UNION
SELECT id FROM table_name, pid
WHERE parent_id = pid.n AND delete_dt = 0
SELECT id FROM table_name
WHERE id IN pid
</select>
需求:已知某个
id的值,需要查询这个
id关联的所有
父级的
数据,如查询到该
id的父类
数据之后,还需要查询父类
数据的爷爷辈
数据,依次类推,直到查询到顶级。
SELECT T2.*
FROM (
SELECT
@r AS _
id,
(SELECT @r :=
parent_
id FROM folder WHERE
id = _
id) AS
parent_
id,
@l := @l + 1 AS lvl
转自:http://www.cnblogs.com/xiaoxi/p/5942805.html
作者语:之前项目使用的是ms sqlserver数据库,支持with as 语法中直接递归调用。但mysql并不支持with as 语法,只能将with as的过程封装成函数,然后在查询中进行调用。此文有效的解决了我的问题,特转载至此,以留以后查询使用。
1、创建表:
DROP TABLE I
创建自定义函数,
CREATE DEFINER=`root`@`%` FUNCTION `get
ParentList`(root
Id varchar(100)) RETURNS varchar(1000) CHARSET utf8mb4 COLLATE utf8mb4_general_ci
BEGIN
DECLARE f
id varchar(100) default '';
DECLARE str
MySQL 树递归查找父级:技术解析与代码示例
在数据库管理中,树状结构是一种常见的数据组织形式,例如组织架构、文件系统等。在MySQL中,我们可以通过递归查询来实现对树状结构的遍历,特别是查找某个节点的所有父级节点。本文将详细介绍MySQL树递归查找父级的技术原理,并提供代码示例。
树状结构的存储方式
在MySQL中,树...
DROP TABLE IF EXISTS `merchant_region`;
CREATE TABLE `merchant_region` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NULL DEFAULT NULL,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMAR
MySQL 递归查询所有父节点
在数据库中,经常会遇到层级结构的数据,例如组织结构、分类目录等。有时我们需要查询某个节点的所有父节点,这就需要用到递归查询。MySQL 8.0 引入了公共表表达式(Common Table Expressions, CTE)的功能,使得递归查询变得更加简单。
递归查询的基本概念
递归查询是一...
Source Server : LongZheng
Source Server Version : 50718
Source Host : localhost:3306
Sourc...