Я создал таблицу сотрудников.Некоторые из этих сотрудников подчиняются другим сотрудникам, указанным в той же таблице.Давайте назовем их менеджерами.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
managerID INT NULL,
FOREIGN KEY (managerID) REFERENCES employees (id) ON DELETE RESTRICT
) ENGINE=INNODB;
Затем в базу данных будут введены некоторые значения:
INSERT INTO employees(id, name, managerID)
VALUES (1, "Ivan", NULL),
(2, "Peter", 1),
(3, "Alexandra", 1),
(4, "Maria", 2),
(5, "Marian", 2),
(6, "Margarita", 3),
(7, "Mihail", 3),
(8, "Eva", 6);
Я хочу запрос SELECT
, который возвращает всех сотрудников и всех менеджеров, о которых они сообщаютк.На данный момент следующая лучшая вещь, которую я имею, это:
SELECT employee.name AS Name, manager.name AS `Reports to:`
FROM employees,
LEFT JOIN employees AS manager ON employee.managerID = manager.id;
с предсказуемым выводом:
Employee Reports to:
Ivan NULL
Peter Ivan
Alexandra Ivan
Maria Peter
Marian Peter
Margarita Alexandra
Mihail Alexandra
Eva Margarita
Мне нужен такой SELECT
запрос, который будет возвращать переменное числостолбцов на основе того, сколько менеджеров имеет один сотрудник.Для меня очевидно, что потребуется рекурсивный SELF JOIN
, но я не знаю, как сказать СУБД, что мне нужно переменное число столбцов для каждой строки, и я не знаю, как сформулировать условие.
Желаемый выход: 