2013-04-16 6 views
1

Следующее приглашение, на которое я пытаюсь ответить:Почему мой запрос вложенных запросов не работает?

Напишите вложенный оператор, чтобы указать имя и фамилию тех сотрудников, которые выполняют ту же работу, что и Ларри Смит.

Ниже приводится таблица работника колонки:

СОТРУДНИК (Emp_Num, Emp_Lname, Emp_Fname, Emp_Initial, Emp_HireDate, Job_Code)

Ниже мой Вложенный запрос:

select emp_fname, emp_lname 
from EMPLOYEE 
where job_code = 
(select job_code 
from employee 
where emp_fname = 'larry' 
and emp_lname = 'smith'); 

Почему это не работает?

+0

Что пошло не так? Есть ли сообщение об ошибке? – showdev

+0

Ваш запрос выглядит хорошо для меня. Я бы предпочел написать запрос как соединение или с подзапросом «EXISTS», но это совершенно верно. Единственная проблема заключается в том, что в подзапросе возвращается более одной строки. В этом случае было бы не только мое предпочтение, но и действительно лучше переключиться на реальный 'JOIN'. Запросы, которые используют 'IN' с подзапросами, использующими' IN' с подзапросами, использующими 'IN', безумно трудно понять и модифицировать, и совершенно ненужны! Специалисты SQL-сценариев не записывают запросы таким образом. – ErikE

+0

Спасибо за ваш комментарий, причина, по которой он не работал, потому что я удалил некоторые кортежи, в которых «Ларри Смит» был одним из них. Кроме того, мне сказали, что всегда можно выполнить вложенный запрос, а не соединение, потому что он использует меньше ресурсов. –

ответ

3

Вы должны использовать IN не =:

select emp_fname, emp_lname 
from EMPLOYEE 
where job_code IN 
    (select job_code 
    from employee 
    where emp_fname = 'larry' 
    and emp_lname = 'smith'); 

Причина в том, что вы сравниваете значение набора, возвращаемого подзапроса.

+0

Хотя запрос все еще работает с «=», я поддерживаю вас, потому что мой профессор всегда подчеркивает «IN». Проблема в том, что я забыл, что я удалил некоторые кортежи, в которых «Ларри Смит» был одним из них. Спасибо за ваш ответ. Допустим, Ларри Смит все еще был там. Как я могу вернуть результаты с результатом «larry Smith» в результате? –

+1

Используйте «NOT IN» в качестве оператора перед подзапросом. –

+0

Что сказал @PieterGeerkens. – PinnyM

Смежные вопросы