我将如何省略名称 jones 但显示具有相同 deptno 的人
Posted
技术标签:
【中文标题】我将如何省略名称 jones 但显示具有相同 deptno 的人【英文标题】:How would i leave out the name jones but display people with the same deptno 【发布时间】:2020-02-19 20:12:46 【问题描述】: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
【问题讨论】:
7566 JONES 20
行应该被删除,不应该吗?
【参考方案1】:
你可以这样做:
select
empno, ename, deptno
from empcopy
where DEPTNO in (select DEPTNO from empcopy where ename ='JONES')
and ename <>'JONES'
【讨论】:
【参考方案2】:您只需在 where 子句中添加一个谓词即可排除 Jones。
SELECT
empno,
ename,
deptno
FROM
empcopy
WHERE
deptno =(SELECT
deptno
FROM
empcopy
WHERE
ename LIKE 'JONES'
)
AND ename != 'JONES';
【讨论】:
不等于是 或 != 在 SQL 中?【参考方案3】:另一种选择:
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>
【讨论】:
【参考方案4】:另一个选项使用自连接,包括 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
Demo
【讨论】:
以上是关于我将如何省略名称 jones 但显示具有相同 deptno 的人的主要内容,如果未能解决你的问题,请参考以下文章
使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?