Использование связанного с SQL подзапроса с оператором exists

#sql #oracle #subquery #where-clause

#sql #Oracle #подзапрос #where-предложение

Вопрос:

Я пытаюсь найти все записи в таблице job_history, где их department_ID отличается от department_id в таблице employees, используя коррелированный подзапрос с оператором exists, однако я получаю код ошибки:

ORA-00933: команда SQL не завершена должным образом

Может кто-нибудь сказать, пожалуйста, скажите мне, что я делаю неправильно, основываясь на схеме и коде ниже?

 Select * 
from Job_History as J 
where Exists(Select * from hr.Employees e where e.Department_ID != J.Department_ID);
 

введите описание изображения здесь

Ответ №1:

Здесь:

 from Job_History as J 
 

Oracle не поддерживает ключевое as слово для псевдонима таблицы (оно поддерживается только для псевдонимов столбцов).

Вам также, скорее всего, потребуется предложение корреляции employee_id в подзапросе.

Итак:

 select * 
from job_history j 
where exists (
    select 1 
    from hr.employees e 
    where e.employee_id = j.employee_id and e.department_id <> j.department_id
);
 

Комментарии:

1. Большое вам спасибо за вашу помощь. Я смог получить ответ, добавив hr в job_history ниже. Извините, что не упомянул, что я использовал Oracle SQL live, поэтому мне пришлось добавить HR при выборе таблицы. Смотрите ниже: выберите * из hr.job_history j, где существует ( выберите 1 из hr.employees e, где e.employee_id = j.employee_id и e.department_id <> j.department_id);