gpt4 book ai didi

sql - Oracle SQL 子查询——匹配多行

转载 作者:行者123 更新时间:2023-12-04 09:36:39 24 4
gpt4 key购买 nike

我有一个 Oracle (PeopleSoft) 表,其中包含员工 ID 和员工能够执行的工作职责。

id | job
------------
01 | JobA
01 | JobB
01 | JobC
02 | JobA
02 | JobC
03 | JobA
03 | JobC
03 | JobF
04 | JobH
04 | JobC
05 | JobA
05 | JobC
这个列表中只有大约 1000 名独特的员工
使用 SQL,我如何找到与员工 02 具有完全相同技能集的员工?
员工 02 可以做 JobA 和 JobC - SQL 应该只返回员工 05,因为他们也可以只做 JobA 和 JobC。员工 03 具有额外技能 (JobF),因此不应将其包含在结果中。
我假设我需要一个子查询来获取我想要的工作列表......像
Select job 
From table where id = '02'
但我不确定如何将每个唯一的员工 ID 与该列表进行比较并获得正确的结果。
任何指导表示赞赏。谢谢你的帮助。

最佳答案

您可以使用 LISTAGGCTE如下:

WITH CTE AS 
(SELECT ID, JOB,
LISTAGG(JOB, ',') WITHIN GROUP (ORDER BY JOB) OVER (PARTITION BY ID) JOBS
FROM YOUR_TABLE)
SELECT C1.ID, C1.JOB
FROM CTE C1 JOIN CTE C2
ON C1.JOBS = C2.JOBS
WHERE C1.ID <> '02' AND C2.ID = '02';
或者您可以使用 GROUP BYHAVING如下:
SELECT C1.ID
FROM CTE C1
WHERE C1.ID <> '02'
GROUP BY C1.ID
HAVING LISTAGG(C1.JOB, ',') WITHIN GROUP (ORDER BY C1.JOB) =
(SELECT LISTAGG(C2.JOB, ',') WITHIN GROUP (ORDER BY C2.JOB)
FROM CTE C2
WHERE C2.ID = '02');

关于sql - Oracle SQL 子查询——匹配多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62547866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com