#mysql #sql
#mysql #sql
Вопрос:
Новичок в программировании здесь. Я хочу извлечь всю информацию из таблицы «сотрудники» вместе с их должностью из другой таблицы, но ограничиться «Помощником инженера», используя подзапрос «СУЩЕСТВУЕТ».
Я попробовал этот подход:
select e.*, t.title
from employees e
join titles t on t.emp_no = e.emp_no
where exists (
select * from titles t
where t.emp_no = e.emp_no
and t.title = 'Assistant Manager'
)
Когда вы удаляете условие «Помощник инженера» и помещаете его вне подзапроса, это работает, но я хочу проверить, возможно ли поместить его внутри подзапроса.
Большое вам спасибо за вашу помощь
Комментарии:
1. Отредактируйте свой вопрос и покажите запрос — в виде текста — на который вы ссылаетесь.
2. Что
EXISTS
здесь нужно? Поскольку на этот вопрос уже дан ответ, второй запрос в ответе полностью охватывает ваш вопрос. Для желаемого результата требуется только одно внутреннее соединение.3. exists будет фильтровать сотрудников, у которых есть заголовок «Помощник менеджера», но объединение заставит ваш результирующий набор содержать все заголовки этих (отфильтрованных) сотрудников.
Ответ №1:
Это сработает, если вы удалите соединение, которое в вашем случае бесполезно и неправильно:
select e.*, 'Assistant Manager' title
from employees e
where exists (
select 1 from titles t
where t.emp_no = e.emp_no
and t.title = 'Assistant Manager'
)
Если вы хотите использовать соединение, тогда нет необходимости EXISTS
:
select e.*, t.title
from employees e inner join titles t
on t.emp_no = e.emp_no and t.title = 'Assistant Manager'
Комментарии:
1. Какова цель «1» в подзапросе? Это из-за логического значения? Является ли значение TRUE или FALSE взаимозаменяемым с 1 или 0?
2.
1
afterSELECT...
— это просто значение, используемое в операторах EXISTS. У него нет специальной цели. Это может быть 0 или * или null. Это просто показывает, что что- то возвращается (что-то существует).