Можно и нужно ли зацикливаться на возвратах запросов из подзапроса?

0

У меня есть запрос, который возвращает идентификатор сотрудника для сотрудников, обладающих определенным навыком в компании.

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) 

Как использовать вспомогательный запрос для получения сотрудников?

  • 0
    Почему бы тебе просто не присоединиться к столам?
Теги:

3 ответа

1

Это работа для 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 удаляет все возможные дубликаты имен сотрудников. Если бы мы знали имена и значения столбцов, мы могли бы предложить более конкретные рекомендации для генерации наиболее полезного запроса.

  • 0
    Теперь я изменил "=" на "in", как предлагали некоторые другие. Было бы лучше реализовать это с JOIN? Почему вы добавили DISTINCT?
0

Вы можете просто использовать IN вместо "="

SELECT first_name, last_name
FROM employee
WHERE employee_id IN (SELECT employee_id
                        FROM competences
                       WHERE service_id = 2)
  • 0
    Ах! Благодарю. Я чувствовал, что должен быть легкий способ сделать это.
0

используйте '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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню