我正在开发员工预订应用程序。我有两个不同的实体项目和用户,它们都分配了可变数量的技能。
我有一个包含各种技能的技能表(列:id、name) 我在名为 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] )
我正在考虑制作自己的函数,它需要两个表变量,然后进行比较(一种修改后的 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
)
)
关于sql - 如何在 SQL Server 2008 中匹配/比较两个结果集中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421842/