MySQL查询所有上级信息

本文详细描述了一个SQL查询,通过JOIN操作获取sys_position表中的数据,展示了一个以rAS_id为基础,利用父ID(parent_id)构建的层级结构,适用于内容社区或IT技术中的数据组织和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT T2.id, T2.`code`
FROM ( 
    SELECT 
        @r AS _id, 
        (SELECT @r := parent_id FROM sys_position WHERE id = _id) AS parent_id, 
        @l := @l + 1 AS lvl 
    FROM 
        (SELECT @r := '83', @l := 0) vars,  
        sys_position h 
    WHERE @r != 0) T1 
JOIN sys_position T2 
ON T1._id = T2.id 
ORDER BY T1.lvl DESC

MySQL中实现递归查询主要有两种方式: 1. 使用WITH RECURSIVE关键字 WITH RECURSIVE语句可以在MySQL中实现递归查询。其语法如下: WITH RECURSIVE cte_name (column_list) AS ( initial_query UNION [ALL] recursive_query ) SELECT * FROM cte_name; 其中: - cte_name:递归查询的名称; - column_list:递归查询的列名; - initial_query:递归查询的初始查询语句; - UNION [ALL]:递归查询的连接符,ALL表示查询结果包含重复记录; - recursive_query:递归查询的递归查询语句。 具体实现方法可以参考以下示例: WITH RECURSIVE emp_list AS ( SELECT emp_id, emp_name, manager_id FROM employee WHERE manager_id IS NULL UNION ALL SELECT e.emp_id, e.emp_name, e.manager_id FROM employee e JOIN emp_list el ON e.manager_id = el.emp_id ) SELECT * FROM emp_list; 这个示例查询了一个员工表,其中包含了员工的ID、名称和经理ID。通过递归查询,可以获取到所有的员工及其经理的信息。 2. 使用存储过程 另一种实现MySQL递归查询的方式是使用存储过程。通过存储过程可以实现递归调用自身的功能,从而实现递归查询。具体实现方法可以参考以下示例: DELIMITER $$ CREATE PROCEDURE get_employee_list (IN manager_id INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE emp_id INT; DECLARE emp_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT emp_id, emp_name FROM employee WHERE manager_id = manager_id_param; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; CREATE TEMPORARY TABLE temp_emp_list (emp_id INT, emp_name VARCHAR(255)); OPEN cur; read_loop: LOOP FETCH cur INTO emp_id, emp_name; IF done THEN LEAVE read_loop; END IF; INSERT INTO temp_emp_list VALUES (emp_id, emp_name); CALL get_employee_list(emp_id); END LOOP; CLOSE cur; SELECT * FROM temp_emp_list; END$$ DELIMITER ; 这个示例中,我们创建了一个存储过程get_employee_list,它接受一个manager_id作为参数,返回所有该经理的员工列表。在存储过程中,我们使用了游标和临时表等技术实现了递归查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值