#sql
#sql
Вопрос:
У меня есть таблица сотрудников и их начальников:
CREATE TABLE IF NOT EXISTS Personnel (
emp CHAR(10) NOT NULL PRIMARY KEY,
boss CHAR(10) DEFAULT NULL REFERENCES Personnel(emp),
salary DECIMAL(6,2) NOT NULL DEFAULT 100.00);
Мне нужно найти всех прямых подчиненных конкретного сотрудника. Мой код показывает только одного сотрудника для каждого начальника:
SELECT (SELECT E2.emp FROM Personnel E2 WHERE E1.emp = E2.boss), E1.emp FROM Personnel E1;
Проблема: нужно напечатать всех сотрудников каждого начальника в одной строке!
Вот код для построения базы данных:
INSERT INTO Personnel VALUES('Ivanov', Null, 1000);
INSERT INTO Personnel VALUES('Petrov', 'Ivanov', 900);
INSERT INTO Personnel VALUES('Sidorov', 'Ivanov', 850);
INSERT INTO Personnel VALUES('Smirnov', 'Petrov', 840);
INSERT INTO Personnel VALUES('Fedorov', 'Petrov', 800);
INSERT INTO Personnel VALUES('Andreev', 'Sidorov', 700);
INSERT INTO Personnel VALUES('Alekseev', 'Sidorov', 700);
INSERT INTO Personnel VALUES('Borisov', 'Sidorov', 740);
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете. Образцы данных в виде текстовых таблиц намного предпочтительнее изображений. И скрипка db / sql полезна. Также определите, что означает «прямой подчиненный».
2. @GordonLinoff Я добавил ВСТАВКИ для создания базы данных.
Ответ №1:
«Прямой подчиненный» означает, что начальник — это человек, о котором идет речь. Следовательно, простого where
предложения должно быть достаточно:
select p.*
from personnel p
where p.boss = ?;
Это ?
заполнитель для имени босса.
Комментарии:
1. @student . , , Ваш комментарий совершенно бесполезен. Что значит «не работает»? Он должен делать именно то, что задумано, и это должно ответить на ваш вопрос.
2. Вывод пустой.
3. Хорошо, как мне перебрать всех боссов (сотрудников)?
4. @student . , , Это не тот вопрос, который вы задали здесь.