У меня есть запрос, который возвращает идентификатор сотрудника для сотрудников, обладающих определенным навыком в компании.
SELECT competences.employee_id
FROM competences
WHERE service_id = 2)
Возвращает
1
2
4
7
Теперь я хочу использовать этот запрос, чтобы найти имена этих сотрудников из таблицы сотрудников. Я пробовал это, что, конечно, не сработало, но можно понять, как это сделать.
SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.employee_id =
(SELECT competences.employee_id
FROM competences
WHERE service_id = 2)
Как использовать вспомогательный запрос для получения сотрудников?
Это работа для JOIN
. Вы должны прочитать о ПРИСОЕДИНЕНИИ. Доступны многие учебные пособия. Вот один.
Попробуйте что-то вроде этого:
SELECT DISTINCT employee.first_name, employee.last_name
FROM employee
JOIN competences ON employee.employee_id = competences.employee_id
WHERE competences.srvice_id = 2
Использование IN
дает те же результаты, что и JOIN
. Но он использует так называемый зависимый подзапрос, который может быть очень плохим для производительности, когда ваши таблицы становятся большими. DISTINCT
удаляет все возможные дубликаты имен сотрудников. Если бы мы знали имена и значения столбцов, мы могли бы предложить более конкретные рекомендации для генерации наиболее полезного запроса.
Вы можете просто использовать IN вместо "="
SELECT first_name, last_name
FROM employee
WHERE employee_id IN (SELECT employee_id
FROM competences
WHERE service_id = 2)
используйте 'in' вместо символа равенства
SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.employee_id in
(SELECT competences.employee_id
FROM competences
WHERE service_id = 2)