下面的架构图。基本上,最底层是技能,然后是工作,然后是应聘者(暂时忽略公司)。每个技能可以与多个作业关联,并且一个作业可以具有多个技能。每个职位都适用于一个候选人,他可以有(曾经)多个(历史)职位,每个职位都有一个公司。
我只是想不出能找到所有X级候选人的问题。
事实上,它变得很复杂,因为X不仅仅是一个技能,它可以是多个技能,使用布尔运算符,例如
找到所有的候选人(技能=“C++”和技能=“UML”),而不是(技能=“Python”)
其中(skill="C++" and skill="UM"L) and NOT(skill="Python")
部分是一个字符串,应该包含一个有效的SQl子查询,但我无法计算查询的其余部分。
[更新]当我说“例如”时,我并不是指那个查询字符串。我试图找到一种方法来处理任何查询串的技能。例如skill=VB
或skill=VB and skill=C
或skillFreeRTOS and not skill=Windows
顺便说一句,这个模式是我认为很好的答案,但是。。。
this question
最佳答案
找到所有的候选人(技能=“C++”和技能=“UML”),而不是(技能=“Python”)
我推荐group by
和having
。
select j.candidate_id
from jobs j join
skills s
on j.job_id = s.job_id join
skill_names sn
on sn.skill_id = s.skill_id
group by j.candidate_id
having sum(s.skill_name = 'C++') > 0 and
sum(s.skill_name = 'UML') > 0 and
sum(s.skill_name = 'Python') = 0;
需要注意的是,这将获得与工作相关的技能,而不是直接与候选人相关的技能。也许这是你对技能定义的一个要求,但也有可能你根本就没有工作为某些应聘者提供某些技能。
关于mysql - 有点复杂的MySql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55941064/