Напишите запрос, чтобы показать ename, у кого нет менеджера отчетов в дептно 10 или 30? - PullRequest
0 голосов
/ 26 ноября 2018
SQL> SELECT * FROM emp;  


  EMPNO  ENAME  JOB       MGR   HIREDATE   SAL   COMM  DEPTNO  
  7369   SMITH   CLERK     7902  17-DEC-80  2900        20
  7499   ALLEN   SALESMAN  7698  20-FEB-81  3600  300   30
  7521   WARD    SALESMAN  7698  22-FEB-81  3250  500   30
  7566   JONES   MANAGER   7839  02-APR-81  4975        20
  7654   MARTIN  SALESMAN  7698  28-SEP-81  3250  1400  30
  7698   BLAKE   MANAGER   7839  01-MAY-81  4850        30
  7782   CLARK   MANAGER   7839  09-JUN-81  4450        10
  7788   SCOTT   ANALYST   7566  19-APR-87  5000        20
  7839   KING    PRESIDENT       17-NOV-81  7000        10
  7844   TURNER  SALESMAN  7698  08-SEP-81  3500  0     30
  7876   ADAMS   CLERK     7788  23-MAY-87  3100        20
  7900   JAMES   CLERK     7698  03-DEC-81  2950        30
  7902   FORD    ANALYST   7566  03-DEC-81  5000        20
  7934   MILLER  CLERK     7782  23-JAN-82  3300        10  

Это таблица emp, приведенная в Oracle SQL.

И мне нужно отобразить сотрудников, у которых нет менеджера по отчетам в отделе 10 или 30.

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Я использовал With Предложение:

with emp_data as (select EMPNO,DEPTNO from emp)
select ENAME from emp e,emp_data ed
where e.mgr =ed.empno(+) and 
(ed.deptno not in (10,30) or e.mgr is null);
ENAME
------
FORD
SCOTT
ADAMS
SMITH
KING
0 голосов
/ 26 ноября 2018

Я бы использовал not exists:

select e.*
from emp e
where not exists (select 1
                  from emp em
                  where em.empno = e.mgr and em.deptno in (10, 30)
                 );
0 голосов
/ 27 ноября 2018

Вы можете использовать подзапрос с коррелированным подзапросом как:

select ename
  from 
  (
    select e.ename, e.mgr,
        ( select mgr 
            from emp 
           where empno = e.mgr 
             and nvl(deptno,0) not in (10,30) ) mgr2
      from emp e
  )
 where mgr is null 
    or mgr2 is not null;

ENAME
------
KING
SCOTT
FORD
SMITH
ADAMS
0 голосов
/ 26 ноября 2018

Вы можете использовать самостоятельное соединение через левое внешнее соединение, как показано ниже:

Select ename
from emp e1
left outer join emp e2 on e2.MGR = e1.EMPNO 
where e2.MGR is null AND e1.DEPTNO in (10,30)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...