【发布时间】:2021-12-21 13:51:52
【问题描述】:
我有一个映射表CandidatesSkills,它保存了候选人和他们所拥有的技能之间的映射。然后我有另一个表 JobRequirements 映射工作和该工作所需的技能。
如果候选人具备该工作所需的所有技能,他就可以申请该工作。候选人可以拥有额外的技能。给定CandiateID,我想找到候选人可以申请的所有工作。
我认为这是 SQL 中带余数的关系除法。还有一个article here 解释了确切的问题。 (注意:本文试图找到所有具有给定工作的所有技能的候选人。我的问题正好相反。我试图找到与给定候选人的技能相匹配的所有工作)
根据数据集,下面的查询应该返回 JobID 2,3 和 5
这是我的 SQL(基于 Peter Larsson (PESO) 的 RDNR/RDWR 解决方案)
DECLARE @CandidateID INT = 1
SELECT JobID
FROM
(
SELECT jr.JobID
,cnt=SUM(CASE WHEN jr.SkillID = c.SkillID THEN 1 ELSE 0 END)
,Items=COUNT(*)
FROM dbo.JobRequirements AS jr
CROSS JOIN dbo.CandidatesSkills AS c
WHERE c.CandidateID = @CandidateID
GROUP BY jr.JobID, jr.SkillID
) d
GROUP BY JobID
HAVING SUM(cnt) = MIN(Items)
AND MIN(cnt) >= 0;
但是,查询不返回任何内容。试图找出我的查询出了什么问题
这里是SQL Fiddle
【问题讨论】:
-
请在代码问题中提供minimal reproducible example。请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
标签: sql-server tsql sql-server-2012 sql-server-2016 relational-division