MySQL 級聯查詢所有父級
表結構:
id | name | code | parent_code |
1 | 老板 | A | |
2 | 總經理 | B | A |
3 | 項目總監 | C | B |
4 | 開發工程師 | D | C |
查詢D開發工程師的所有上級:
SELECT `name`, @`code` AS c_ids, ( SELECT @`code` := parent_code FROM depart WHERE `code` = @`code` ) AS p_ids FROM depart ,( SELECT @`code` := 'D' ) b
SQL 分析:
SELECT @`code`:= 'D' 的作用是 把'D'賦值給變量 @`code`
賦值的方法還有其他寫法:
1、set @`code`='D';
2、set @`code`:='D';
3、select @`code`='D';
4、select @`code`= 字段名 from 表名 where ……
SELECT @`code` := parent_code FROM depart WHERE `code` = @`code`
不斷的賦值與查詢:
不斷的查詢 parent_code 並賦值給@`code` 通過WHERE條件不斷的查詢新值。
去重的寫法:
SELECT u2.`code`, u2.`name` FROM ( SELECT @`code` AS c_ids , ( SELECT @`code` := parent_code FROM depart WHERE `code` = @`code` ) AS p_ids ,@l := @l + 1 AS LEVEL FROM depart, ( SELECT @`code` := 'D', @l := 0 ) b ) u1 JOIN depart u2 ON u1.c_ids = u2.`code`