6 sql t-sql sql-server sql-server-2008
我正在做一份员工预订申请.我有两个不同的实体项目和用户都被分配了可变数量的技能.
我有一个具有各种技能的技能表(列:id,名称)我在一个名为UserSkills的表中注册用户技能(有两个外键列:fk_user和fk_skill)我在另一个名为ProjectSkills的表中注册项目技能(有两个外键列:fk_project和fk_skill).
在注册设置技能时,项目可能需要6种不同的技能和用户.
棘手的部分是我必须根据他们的技能为我的项目找到用户.我只对符合项目要求的所有技能的用户感兴趣.用户被允许拥有更多技能,然后需要.
以下代码不起作用(即使它确实如此,也不会非常友好),但它说明了我的想法:
SELECT * FROM Users u WHERE
( SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id )
>=
( SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id] )
Run Code Online (Sandbox Code Playgroud)
我正在考虑制作我自己的函数,该函数需要两个TABLE变量,然后计算出comparisson(一种经过修改的IN函数),但我宁愿找到一个性能更友好的解决方案.
我正在开发SQL Server 2008.
我真的很感激任何想法或建议.谢谢!
SELECT *
FROM Users u
WHERE NOT EXISTS
(
SELECT NULL
FROM ProjectSkill ps
WHERE ps.pk_project = @someid
AND NOT EXISTS
(
SELECT NULL
FROM UserSkills us
WHERE us.fk_user = u.id
AND us.fk_skill = ps.fk_skill
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10182 次 |
| 最近记录: |