SQL数据表匹配查询问题:如何对比员工许可证匹配情况?求解决方案
员工许可证匹配查询解决方案
问题背景
需要对比员工1001与2002、3003的许可证持有情况,原LEFT JOIN方案输出结果冗余,未清晰展示匹配状态。
优化方案1:条件聚合(推荐,结果更直观)
通过EXISTS子查询判断其他员工是否持有对应许可证,直接输出匹配状态:
SELECT e1.License, CASE WHEN EXISTS (SELECT 1 FROM #Employees e2 WHERE e2.EmployeeID = 2002 AND e2.License = e1.License) THEN '持有' ELSE '未持有' END AS [员工2002持有状态], CASE WHEN EXISTS (SELECT 1 FROM #Employees e3 WHERE e3.EmployeeID = 3003 AND e3.License = e1.License) THEN '持有' ELSE '未持有' END AS [员工3003持有状态] FROM #Employees e1 WHERE e1.EmployeeID = 1001;
执行结果会清晰展示1001的每个许可证,2002和3003是否持有。
优化方案2:优化LEFT JOIN输出
保留JOIN逻辑,但调整输出列,去除冗余信息,明确匹配状态:
SELECT e1.License, CASE WHEN e2.EmployeeID IS NOT NULL THEN '匹配' ELSE '不匹配' END AS [与员工2002的匹配状态], CASE WHEN e3.EmployeeID IS NOT NULL THEN '匹配' ELSE '不匹配' END AS [与员工3003的匹配状态] FROM #Employees e1 LEFT JOIN #Employees e2 ON e1.License = e2.License AND e2.EmployeeID = 2002 LEFT JOIN #Employees e3 ON e1.License = e3.License AND e3.EmployeeID = 3003 WHERE e1.EmployeeID = 1001;
此方案通过判断JOIN后的非空值,直接输出匹配结果,避免原代码中SELECT *带来的重复列问题。
内容的提问来源于stack exchange,提问作者mikey22022
相关产品推荐
相关产品推荐

