Mysql 这是否可能使用SQL?

Mysql 这是否可能使用SQL?,mysql,sql,sql-server,Mysql,Sql,Sql Server,我正在为技能矩阵应用程序使用SQL数据库,我需要一个查询来返回符合给定职位条件的员工列表。以下是相关关系的简要概述: 员工通过培训掌握了许多技能 资格 这个职位有很多优点 从需求看技能 是否有一种有效的方法返回符合某个职位要求的员工名单 编辑 当然,这是可能的。我数了七张表格:雇员、资格、雇员资格、职位、要求、职位要求和资格要求。如果你的资历和要求总是1:1,也就是说,它们是一样的,那么你可以更简单地用5张表来做:员工、职位、技能、雇员技能、职位技能 一旦定义了表,构建查询的诀窍是首先查找员工不

我正在为技能矩阵应用程序使用SQL数据库,我需要一个查询来返回符合给定职位条件的员工列表。以下是相关关系的简要概述:

员工通过培训掌握了许多技能 资格 这个职位有很多优点 从需求看技能 是否有一种有效的方法返回符合某个职位要求的员工名单

编辑


当然,这是可能的。我数了七张表格:雇员、资格、雇员资格、职位、要求、职位要求和资格要求。如果你的资历和要求总是1:1,也就是说,它们是一样的,那么你可以更简单地用5张表来做:员工、职位、技能、雇员技能、职位技能


一旦定义了表,构建查询的诀窍是首先查找员工不符合条件的任何职位,然后将结果集与职位表进行排除联接以获得结果。

当然,这是可能的。我数了七张表格:雇员、资格、雇员资格、职位、要求、职位要求和资格要求。如果你的资历和要求总是1:1,也就是说,它们是一样的,那么你可以更简单地用5张表来做:员工、职位、技能、雇员技能、职位技能


一旦定义了表,构建查询的诀窍是首先查找员工不符合条件的任何职位,然后将该结果集进行排除联接,返回到职位表以获得结果。

是的,如果职位只返回这些员工,则要实现所需目标,其资质包括该职位所需的所有技能。如果您检索这些员工,此列表将表示您正在寻找的客户列表

更新 因为我没有任何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)
在以下各项上创建索引:

雇员身份证 资格.雇员身份证 资格、技能和身份 要求.技能(id) 职位要求
是的,为了达到你想要的,你需要一个职位,只让那些具备该职位所需全部技能的资格的员工返回。如果您检索这些员工,此列表将表示您正在寻找的客户列表

更新 因为我没有任何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)
在以下各项上创建索引:

雇员身份证 资格.雇员身份证 资格、技能和身份 要求.技能(id) 职位要求 它将发现所有员工都没有不符合员工资格的要求

嵌套不存在的用法甚至在

它将发现所有员工都没有不符合员工资格的要求


嵌套不存在的用法甚至在

中提到,我有点明白你的意思,但是你能发布一些更具体的东西吗,也许是一些表格图?还是设计表是问题的一部分?既然你在文章中同时使用了mysql和sql server,你能澄清一下你是使用mysql、ms sql server还是两者都使用吗?如果您用表和列表示相关关系的概述,也可能会有所帮助。否则,讨论效率是没有意义的,因为它取决于特定的模式。可能只会是SQL Server。我有点明白你的意思,但是你能发布一些更具体的东西吗,也许是一些图表?还是设计表是问题的一部分?既然你在文章中同时使用了mysql和sql server,你能澄清一下你是使用mysql、ms sql server还是两者都使用吗?如果您用表和列表示相关关系的概述,也可能会有所帮助。否则,讨论效率是没有意义的,因为它取决于特定的模式。可能只使用SQL Server。不知道SQL Server,但MySQL在每个查询的每个表中只使用一个索引。你可以在一个索引中放置多列,但为了最有效,索引中列的顺序应该与查询中列的顺序相匹配-因此,employee.id,name上的索引实际上比name,id上的索引要快。@Dire:谢谢你的评论,我没有使用mysql,所以我更新了我的答案,这只反映了我对sql server的了解。这看起来可能会找到满足某些要求的员工,而不是满足所有要求的员工。@Joel Coehoorn:你当然是对的,谢谢你。只是不重复你的答案,我很抱歉
根据需求中不同技能的数量进行实施。您认为这有什么问题吗?我不知道sql server,但MySQL在每个查询中每个表只使用一个索引。你可以在一个索引中放置多列,但为了最有效,索引中列的顺序应该与查询中列的顺序相匹配-因此,employee.id,name上的索引实际上比name,id上的索引要快。@Dire:谢谢你的评论,我没有使用mysql,所以我更新了我的答案,这只反映了我对sql server的了解。这看起来可能会找到满足某些要求的员工,而不是满足所有要求的员工。@Joel Coehoorn:你当然是对的,谢谢你。只是不重复您的答案,我将根据需求中不同技能的数量给出实现。你觉得这有什么问题吗?
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
    )
)