如何匹配/比较SQL Server 2008中两个结果集中的值?

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.

我真的很感激任何想法或建议.谢谢!

Qua*_*noi 6

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)