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
Вы можете сделать это следующим образом:
select empno, ename, deptno from empcopy where DEPTNO in (select DEPTNO from empcopy where ename ='JONES') and ename <>'JONES'
Вы просто добавляете предикат к предложению where, чтобы исключить Джонса.
SELECT empno, ename, deptno FROM empcopy WHERE deptno =(SELECT deptno FROM empcopy WHERE ename LIKE 'JONES' ) AND ename != 'JONES';
Еще одна опция использует самосоединение, включая неравенство для значений столбца ename:
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
Демо
Еще один вариант:
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>