У меня есть следующий запрос -как написать предикат, как NOT IN предиката
select ssn, fname, lname
from employee, department
where (dname, dno) in (select dname, dno
from department, employee
where dno=dnumber
and dname <> 'Headquarters'
and dname <> 'Administration');
`
Он возвращает ssn
, fname
и lname
сотрудников, которые не работают в штаб-квартире или административный отдел.
У меня возникли проблемы с изменением логики и выяснением того, как получить тот же результат, используя «не в». Из того, что я собрал, предикат «in» проходит через таблицы и проверяет, может ли он создавать кортежи fname
, lname
и ssn
, который основан на номере отдела из таблицы сотрудников, соответствующей номеру отдела в таблице отдела.
Я не понимаю ... Почему бы вам просто не использовать «не в»? Каков ожидаемый результат? Вы также можете сделать соединение и получить гораздо более простой запрос ... –
затем сделать его 'не в', ** ИЛИ ** изменить на' dname = '? –
и нет смысла использовать подзапрос для этого, тем более, что подзапрос находится в одних и тех же таблицах. почему вы не можете просто «выбрать» у сотрудника, где dname not in ('hq', 'admin') '? –