【发布时间】:2022-11-16 04:52:19
【问题描述】:
到目前为止,这是我的查询,但仍在努力解决如何不显示 JONES 记录的问题...
选择 SNAME,工作人员的工作 WHERE JOB IN (SELECT JOB FROM STAFF WHERE SNAME = 'JONES');
结果...
姓名工作
琼斯经理
哈亚特经理
克拉克经理
【问题讨论】:
-
..
AND sname != 'JONES' -
如果你知道如何只选择
JONES,我想你应该知道如何排除它们。
到目前为止,这是我的查询,但仍在努力解决如何不显示 JONES 记录的问题...
选择 SNAME,工作人员的工作 WHERE JOB IN (SELECT JOB FROM STAFF WHERE SNAME = 'JONES');
结果...
姓名工作
琼斯经理
哈亚特经理
克拉克经理
【问题讨论】:
AND sname != 'JONES'
JONES,我想你应该知道如何排除它们。
添加另一个过滤器以排除 JONES 行:
SELECT SNAME,
JOB
FROM STAFF
WHERE JOB IN (SELECT JOB FROM STAFF WHERE SNAME = 'JONES')
AND sname != 'JONES';
或者,不查询表两次:
SELECT sname,
job
FROM (
SELECT sname,
job,
COUNT(CASE sname WHEN 'JONES' THEN 1 END) OVER (PARTITION BY job)
AS num_jones
FROM staff
)
WHERE num_jones > 0
AND sname != 'JONES';
其中,对于样本数据:
CREATE TABLE staff (sname, job) AS
SELECT 'JONES', 'MANAGER' FROM DUAL UNION ALL
SELECT 'HAYAT', 'MANAGER' FROM DUAL UNION ALL
SELECT 'CLARK', 'MANAGER' FROM DUAL UNION ALL
SELECT 'ALICE', 'CEO' FROM DUAL UNION ALL
SELECT 'BERYL', 'CTO' FROM DUAL
两种输出:
| SNAME | JOB |
|---|---|
| HAYAT | MANAGER |
| CLARK | MANAGER |
【讨论】: