如何从CandidateInterview表查询仅持有Not Yet状态无其他状态的候选人
注:根据你提供的测试数据映射关系:
Status=1对应Not yet,Status≥2对应其他面试状态。
解决方案
方法1:分组聚合筛选(写法简洁直观)
SELECT CandidateID FROM CandidateInterview GROUP BY CandidateID HAVING MAX(Status) = 1;
逻辑说明:按候选人ID分组后,只要该候选人所有面试记录的最大状态值为1,就说明他没有其他大于1的状态,完全符合要求。用你提供的测试数据执行后,返回结果为120,符合预期。
方法2:NOT EXISTS 排除法(大表查询性能更优)
SELECT DISTINCT ci1.CandidateID FROM CandidateInterview ci1 WHERE ci1.Status = 1 AND NOT EXISTS ( SELECT 1 FROM CandidateInterview ci2 WHERE ci2.CandidateID = ci1.CandidateID AND ci2.Status != 1 );
逻辑说明:先筛选出有Not yet状态的候选人,再排除掉这些候选人中存在其他状态的记录,剩下的就是仅存在Not yet状态的候选人。
内容的提问来源于stack exchange,提问作者Martin James
相关产品推荐
相关产品推荐

