【问题标题】:List the name and job of staff who have the same job as JONES, but do not display the JONES record列出与JONES有相同工作的人员姓名和工作,但不显示JONES记录
【发布时间】:2022-11-16 04:52:19
【问题描述】:

到目前为止,这是我的查询,但仍在努力解决如何不显示 JONES 记录的问题...

选择 SNAME,工作人员的工作 WHERE JOB IN (SELECT JOB FROM STAFF WHERE SNAME = 'JONES');

结果...

姓名工作


琼斯经理
哈亚特经理
克拉克经理

【问题讨论】:

  • .. AND sname != 'JONES'
  • 如果你知道如何只选择JONES,我想你应该知道如何排除它们。

标签: sql oracle


【解决方案1】:

添加另一个过滤器以排除 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

fiddle

【讨论】:

  • 谢谢,这有助于我的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2022-01-14
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多