Как бы я пропустил имя Джонс, но показать людей с таким же deptno - PullRequest
0 голосов
/ 19 февраля 2020
SQL> select empno, ename, deptno
  2  from empcopy
  3  where deptno =
  4      (select deptno
  5       from empcopy
  6       where ename like 'JONES');

 EMPNO ENAME          DEPTNO
------ ---------- ----------
  7369 SMITH              20
  7566 JONES              20
  7788 SCOTT              20
  7876 ADAMS              20
  7902 FORD               20

Ответы [ 4 ]

2 голосов
/ 19 февраля 2020

Вы можете сделать это следующим образом:

select 
empno, ename, deptno
from empcopy 
where DEPTNO in (select DEPTNO  from empcopy where ename ='JONES')
and ename <>'JONES'
1 голос
/ 19 февраля 2020

Вы просто добавляете предикат к предложению where, чтобы исключить Джонса.

SELECT
  empno,
  ename,
  deptno
  FROM
  empcopy
 WHERE
  deptno =(SELECT
             deptno
             FROM
             empcopy
            WHERE
             ename LIKE 'JONES'
          )
  AND ename != 'JONES';
0 голосов
/ 20 февраля 2020

Еще одна опция использует самосоединение, включая неравенство для значений столбца ename:

select e1.empno, e1.ename, e1.deptno
  from employees e1
  join employees e2 
    on e1.deptno = e2.deptno
   and e2.ename = 'JONES'
   and e1.ename != e2.ename

Демо

0 голосов
/ 19 февраля 2020

Еще один вариант:

SQL> with jones as
  2    (select ename, deptno
  3     from emp
  4     where ename = 'JONES'
  5    )
  6  select e.empno, e.ename, e.deptno
  7  from emp e join jones j on e.deptno = j.deptno and e.ename <> j.ename;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7369 SMITH              20
      7788 SCOTT              20
      7876 ADAMS              20
      7902 FORD               20

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...