mysql 找出最大父级_mysql 根据id查所有父级或子级

--查询父级

SELECT T2.jgid, T2.`sjjgid` ,t2.`jgmc`

FROM (

SELECT

@r AS _id,

(SELECT @r := sjjgid FROM `yygl_jgxx` WHERE jgid = _id) AS 2v2,

@l := @l + 1 AS lvl

FROM

(SELECT @r := '09') vars, -- --查询id为5的所有上级

yygl_jgxx h

WHERE @r <> -1) T1

JOIN yygl_jgxx T2

ON T1._id = T2.jgid

order by jgid asc;

--查询子级 ,存储过程+临时表

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `findOrgList`(IN orgId VARCHAR(20))

BEGIN

DROP TEMPORARY TABLE IF EXISTS tmp_org;

-- 创建临时表

CREATE TEMPORARY TABLE tmp_org(org_id VARCHAR(20));

-- 清空临时表数据

DELETE FROM tmp_org;

-- 发起调用

CALL findOrgChildList(orgId);

-- 从临时表查询结果

SELECT org_id FROM tmp_org ORDER BY org_id;

END;;

DELIMITER ;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `findOrgChildList`(IN orgId VARCHAR(20))

BEGIN

DECLARE v_org VARCHAR(20) DEFAULT '';

DECLARE done INTEGER DEFAULT 0;

-- 查询结果放入游标中

DECLARE C_org CURSOR FOR SELECT d.jgid

FROM `yygl_jgxx` d

WHERE d.`sjjgid` = orgId;

DECLARE CONTINUE HANDLER FOR NOT found SET done=1;

SET @@max_sp_recursion_depth = 10;

-- 传入的组织id写入临时表

INSERT INTO tmp_org VALUES (orgId);

OPEN C_org;

FETCH C_org INTO v_org;

WHILE (done=0)

DO

-- 递归调用,查找下级

CALL findOrgChildList(v_org);

FETCH C_org INTO v_org;

END WHILE;

CLOSE C_org;

END;;

DELIMITER ;

mybaits调用

mysql> call `findOrgList`('00')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值