Mysql 报告具有经理标志(循环)的直线经理的直线经理

Mysql 报告具有经理标志(循环)的直线经理的直线经理,mysql,sql,loops,select,Mysql,Sql,Loops,Select,在上面的示例数据中,有3个用户(第4个是最后一个行管理器)。我希望能够选择“将flg_manager设置为1的第一个键搜索”作为AuthManager(表示他们是授权经理) 我希望得到的查询结果是: CREATE TABLE `empTest` ( `keysearch` INT(8) NOT NULL, `flg_manager` INT(1) NOT NULL, `fk_manager` INT(8) NOT NULL, PRIMARY KEY (`keyse

在上面的示例数据中,有3个用户(第4个是最后一个行管理器)。我希望能够选择“将flg_manager设置为1的第一个键搜索”作为AuthManager(表示他们是授权经理)

我希望得到的查询结果是:

CREATE TABLE `empTest` (
    `keysearch` INT(8) NOT NULL,
    `flg_manager` INT(1) NOT NULL,
    `fk_manager` INT(8) NOT NULL,
    PRIMARY KEY (`keysearch`)
)

INSERT INTO `empTest` (`keysearch`, `fk_manager`, `flg_manager`) VALUES ('5407', '5866', 0);
INSERT INTO `empTest` (`keysearch`, `fk_manager`, `flg_manager`) VALUES ('5866', '0679', 0);
INSERT INTO `empTest` (`keysearch`, `fk_manager`, `flg_manager`) VALUES ('0679', '9177', 1);
INSERT INTO `empTest` (`keysearch`, `fk_manager`, `flg_manager`) VALUES ('9177', '0011', 1);
我认为这需要一个循环,但我真的不知道从哪里开始。我知道我需要使用中间雇员作为联接,以便能够从雇员5407看到雇员0679。令人烦恼的是,在这个例子中,只有一名员工需要“跳转”,但我需要能够解释多达8次跳转

完全错误-但我完全不知所措

Keysearch,AuthManager

5407,0679

5866,0679

0679,9177
否则当

我需要做大量的案例循环吗

有什么建议吗?运行MariaDB 10.3。

您可以为给定的员工ID找到经理,但对于大量结果来说,这可能会很昂贵。如果这是您非常需要的内容,您可以创建一个employee->manager映射表,并添加一个清空触发器,以使映射表保持任何更改的最新状态,但这本身并不是一件小事——您可能需要第三个表来存储管理层次结构的平面表示,以发现要在manager表中更新的相关记录。关于邻接列表的部分可能会有所帮助
SELECT e.keysearch, @manager AS manager
FROM emptest e, emptest m1, emptest m2
WHERE @manager = CASE WHEN (
SELECT e.fk_manager
FROM e
WHERE e.fk_manager = m1.keysearch AND m1.flg_manager = 1)