Сообщите менеджеру линии вашего линейного менеджера, где у них есть флаг менеджера (петли) - PullRequest
0 голосов
/ 31 августа 2018
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...