我正在使用一个用于Skills Matrix应用程序的SQL数据库,我需要一个查询来返回符合给定位置的员工列表。以下是相关关系的简要概述:
是否有一种有效的方法可以返回具有满足特定职位要求资格的员工名单?
修改
employees
- id
- name
positions
- id
- title
skills
- id
- name
requirements
- position_id
- skill_id
qualifications
- employee_id
- skill_id
答案 0 :(得分:2)
当然,这是可能的。我在那里计算七个表:员工,资格,员工资格,职位,要求,职位要求和要求资格。如果您的资格和要求 始终 为1:1(即,它们是相同的),您可以更简单地(5个表)这样做:员工,职位,技能,员工技能,职位技能。
一旦定义了表格,构建查询的技巧就是首先查找员工不合格的任何职位,然后将该结果集的排除联接返回到获得结果的位置表。
答案 1 :(得分:2)
SELECT *
FROM employees e
WHERE NOT EXISTS (
SELECT *
FROM requirements r
WHERE r.position_id = 1234
AND NOT EXISTS (
SELECT *
FROM qualifications q
WHERE q.skill_id = r.skill_id
AND q.employee_id = e.employee_id
)
)
它会找到所有员工,这样就没有任何要求没有被员工的资格填补。
中甚至提到了嵌套NOT EXISTS
的使用
答案 2 :(得分:1)
是的,为了达到您想要的目标,给予职位只返回那些具有共同包含职位所需技能的资格的员工。如果您检索这些员工,此列表将代表您所关注的客户列表。
<强>更新强> 由于我没有任何mysql经验,我的回复只涉及sql server。 尝试这样的事情:
select
qualifications.employee_id
from
qualifications
join
requirements
on
requirements.skill_id = qualifications.skill_id
where
requirements.position_id = 1234
group by
qualifications.employee_id
having
count(qualifications.skill_id) = (select count(distinct skill_id) from requirements where requirements.position_id = 1234)
为每个
创建一个索引