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);
В приведенном выше примере 3 пользователя (4-й - менеджер последней строки). Я хотел бы иметь возможность выбрать "1-й поиск ключей, где для них установлен flg_manager, равный 1", в качестве AuthManager (указывая, что они являются администратором авторизации)
Результат запроса, которого я ищу:
Keysearch,AuthManager
5407,0679
5866,0679
0679,9177
Я думаю, что это должен быть цикл, но я действительно не знаю, с чего начать. Я понимаю, что мне нужно использовать среднего сотрудника в качестве присоединения, чтобы иметь возможность видеть от сотрудника 5407 до сотрудника 0679. К сожалению, в этом примере «прыгает» только один сотрудник, но мне нужно иметь возможность учитывать до 8 прыжков .
Совершенно неправильно - но я в полной растерянности ...
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)
Иначе, когда ...
Нужно ли делать много циклов Case?
Есть предложения? Запуск MariaDB 10.3.