首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询技能数据库

查询技能数据库
EN

Stack Overflow用户
提问于 2014-05-05 16:26:58
回答 3查看 1.6K关注 0票数 0

我用三个表设计了以下技能数据库:

  1. 具有列名、人员号的雇员

  1. 具有列技能名称,skillid

  1. 使用列skillid、人员数、技能级别的技能映射

( 1)和( 2)只给人和技能分配号码。3)将技能水平分配给员工。

例如,表3中的第13行6 )是指拥有个人3号技能的人具有1项技能知识,而知识水平为6。

我想要的是找回那些同时擅长的人

  1. 具有3级知识的技能2

  1. 具有5级知识的技能4和

  1. 具有2级知识的技能8。

这样做最好的方法是什么?我首先考虑选择符合条件1的人,然后从他们中选出符合条件2的人,然后从结果中选出符合条件3的人)。但是对于这种方法,我必须创建临时表,并使用一些过程编程语言超越SQL。有没有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-05 16:31:49

我会使用一个子查询来计算一个人的技能匹配数,并确保它是三个:

代码语言:javascript
运行
复制
SELECT name
FROM   person
WHERE  personnelnumber IN (SELECT   personnelnumber
                           FROM     skillmapping
                           WHERE    (skillid = 2 AND skilllevel = 3) OR
                                    (skillid = 4 AND skilllevel = 5) OR
                                    (skillid = 8 AND skilllevel = 2) 
                           GROUP BY personnelnumber
                           HAVING   COUNT(*) = 3)
票数 1
EN

Stack Overflow用户

发布于 2014-05-05 16:40:13

应该是一个相当直截了当的内连接;

代码语言:javascript
运行
复制
SELECT e.*
FROM employees e
JOIN skillmapping s1 ON s1.personnelnumber = e.personnelnumber 
                    AND s1.skillid   = 2
                    AND s1.skillevel = 3
JOIN skillmapping s2 ON s2.personnelnumber = e.personnelnumber 
                    AND s2.skillid   = 4
                    AND s2.skillevel = 5
JOIN skillmapping s3 ON s3.personnelnumber = e.personnelnumber 
                    AND s3.skillid   = 8
                    AND s3.skillevel = 2
票数 2
EN

Stack Overflow用户

发布于 2014-05-05 16:33:55

查询(我使用现有功能来检查该组合是否存在.):

代码语言:javascript
运行
复制
SELECT * FROM Employees WHERE 
EXISTS (SELECT * FROM skillmapping t2 WHERE t2.PersonnelNumber = Employees.PersonnelNumber AND SkillId = 2 AND t2.SkillLevel >= 3) --NOTE: lvl 3 or more!
AND EXISTS (SELECT * FROM skillmapping t2 WHERE t2.PersonnelNumber = Employees.PersonnelNumber AND SkillId 4 AND t2.SkillLevel >= 5) -- NOTE: lvl 5 or more 
AND EXISTS (SELECT * FROM skillmapping t2 WHERE t2.PersonnelNumber = Employees.PersonnelNumber AND SkillId = 8 AND t2.SkillLevel >= 2) -- NOTE: lvl 2 or more 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23477280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档