假设我有一张表A,其中包含潜在员工ID的清单及其技能代码形式的专业技能:
ID | skill code
005 12
005 3
007 42
007 8
013 6
013 22
013 18
我还有另一张表B,其中列出了几个工作职位ID及其相应的所需技能ID:
Job ID | skill code
1 3
1 32
1 21
1 44
2 15
2 62
.
.
.
如何找出特定人员有资格获得的工作ID?我需要选择包含所有人技能的所有工作ID。比方说,我需要找到员工ID 003符合条件的所有工作ID,如何构建Oracle SQL查询以获取此信息?
我希望能够在WHERE子句中输入任何员工ID,以查找该人员有资格获得的工作。
答案 0 :(得分:1)
一个想法是计算每个人和工作的技能数量:
SELECT A.id as person_id,
B.JOB_ID
FROM A
JOIN B
ON A.skill_code=B.skill_code
GROUP BY a.id, b.job_id
HAVING count(*) = (select count(*) from a a2 where a2.job_id = b.job_id);
未经测试并假设表格已正常化。
在OP的comment之后更新。 要求所有需要一个人所有技能的工作:
WHERE a.id = :emp_id
Update2 :问题已更新为:
我希望能够在WHERE子句中输入任何员工ID,以查找该人员有资格获得的工作。
为此,您只需将FBSDKSharePhoto
添加到第一个查询即可。 (上面分组)
答案 1 :(得分:0)
试试这个
WITH b1 AS
(SELECT job_id,
skill,
COUNT(*) over (partition BY job_id order by job_id) rr
FROM b
) ,
res1 AS
(SELECT a.id,
b1.job_id,
rr,
COUNT(*) over (partition BY id, job_id order by id) rr2
FROM A
JOIN B1
ON A.skill=B1.skill
)
SELECT id, job_id FROM res1 WHERE rr=rr2