You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:10:32