簡體   English   中英

如何匹配/比較SQL Server 2008中兩個結果集中的值?

[英]How to match/compare values in two resultsets in 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] )

我正在考慮制作我自己的函數,該函數需要兩個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
                )
        )
--  Assumes existance of variable @ProjectId, specifying
--  which project to analyze
SELECT us.UserId
 from UserSkills us
  inner join ProjectSkills ps
   on ps.SkillId = us.SkillId
    and ps.ProjectId = @ProjectId
 group by us.UserId
 having count(*) = (select count(*)
                     from ProjectSkills
                     where ProjectId = @ProjectId)

你想測試這個調試,因為我沒有測試數據來運行它。 同上索引以優化它。

(現在發帖,看看有人提出了一個更好的方法 - 應該有比這更微妙和有效的東西。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM