1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xuthus5-Database-SQL-Actual-Combat

Клонировать/Скачать
11.获取所有员工当前的manager.md 2.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:53 c66e7df

Получение текущих менеджеров всех сотрудников

Описание задачи

Получите текущих менеджеров всех сотрудников. Если текущий менеджер является самим сотрудником, то такой результат не отображается. "Текущее" означает, что to_date='9999-01-01'. Первый столбец в результате должен содержать текущий номер сотрудника (emp_no), а второй — номер его менеджера (manager_no).

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`)
);
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`)
);

Ответ

SELECT de.emp_no, dm.emp_no AS manager_no FROM dept_emp de LEFT JOIN dept_manager dm ON de.dept_no = dm.dept_no WHERE de.to_date = '9999-01-01' AND dm.to_date = '9999-01-01' AND de.emp_no != dm.emp_no

Объяснение решения

Для получения текущего менеджера каждого сотрудника используется объединение таблиц dept_emp и dept_manager. Мы используем левое соединение (LEFT JOIN) между этими двумя таблицами с условием совпадения dept_no, чтобы связать записи сотрудников и их менеджеров.

Затем мы применяем условия, чтобы выбрать только те строки, где to_date равна '9999-01-01' как для сотрудников, так и для менеджеров, и чтобы исключить случаи, когда менеджером является сам сотрудник (de.emp_no != dm.emp_no).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xuthus5-Database-SQL-Actual-Combat.git
git@api.gitlife.ru:oschina-mirror/xuthus5-Database-SQL-Actual-Combat.git
oschina-mirror
xuthus5-Database-SQL-Actual-Combat
xuthus5-Database-SQL-Actual-Combat
master