MySQL 级联查询所有父级

表结构:

id name code parent_code
1 老板 A  
2 总经理 B A
3 项目总监 C B
4 开发工程师 D C

 

 

 

 

 

 

查询D开发工程师的所有上级:

1
SELECT `name`, @`code` AS c_ids, <br>( SELECT @`code` := parent_code FROM depart WHERE `code` = @`code` ) <br>AS p_ids FROM depart ,<br>( SELECT @`code` := 'D' ) b

  

 

SQL 分析:

1
SELECT @`code`:= 'D' 的作用是 把'D'赋值给变量 @`code`

  

 

赋值的方法还有其他写法:
1、set @`code`='D';
2、set @`code`:='D';
3、select @`code`='D';
4、select @`code`= 字段名 from 表名 where ……

 

1
SELECT @`code` := parent_code FROM depart WHERE `code` = @`code`

  

不断的赋值与查询:

不断的查询 parent_code 并赋值给@`code` 通过WHERE条件不断的查询新值。

去重的写法:

 

1
SELECT u2.`code`, u2.`name` <br>FROM ( SELECT @`code` AS c_ids , <br>( SELECT @`code` := parent_code FROM depart WHERE `code` = @`code` ) AS p_ids ,@l := @l + 1 AS LEVEL FROM depart, <br>( SELECT @`code` := 'D', @l := 0 ) b ) u1 <br>JOIN depart u2 ON u1.c_ids = u2.`code`

  

posted @   liuhuayiye  阅读(405)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示