[英]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.