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

如何用SQL查询全部在职员工并展示其指定表单的签署状态?

调整查询以显示所有符合条件的在职员工及签署状态

问题出在你把tblSign的过滤条件放在了WHERE子句里,导致LEFT JOIN退化成了INNER JOIN——未签署符合条件表单的员工对应的tblSign字段值为NULL,WHERE里的条件会把这些行直接过滤掉。

要实现显示所有estatus='A'且location='013'的在职员工,同时展示他们是否签署了指定表单,需要把tblSign的筛选条件移到LEFT JOIN的ON子句中,而不是WHERE子句。另外关联tblLocs获取位置信息的逻辑可以保留,示例语句如下:

SELECT 
    e.emplid,
    e.full_name, -- 替换为实际员工姓名字段
    e.location,
    l.location_name, -- 替换为tblLocs中实际的位置名称字段
    s.sigdate,
    s.sigact,
    -- 新增字段直观显示签署状态
    CASE WHEN s.emplid IS NOT NULL THEN '已签署符合条件的表单' ELSE '未签署' END AS sign_status
FROM tblEmpl e
-- 关联tblLocs获取位置信息,若tblLocs中一定存在对应location的记录,用INNER JOIN更高效
INNER JOIN tblLocs l 
    ON e.location = l.location_code -- 替换为实际关联字段
LEFT JOIN tblSign s 
    ON e.emplid = s.emplid -- 替换为员工表和签署表的实际关联字段
    AND s.formid = '9648'
    AND s.sigact <> 'O'
    AND s.sigdate >= '2022-11-01'
WHERE e.estatus = 'A'
    AND e.location = '013';

关键说明:

  • 将tblSign的筛选条件放在LEFT JOIN的ON子句中,只会在关联时匹配符合条件的签署记录,不会过滤主表tblEmpl中的员工行,未签署的员工对应的tblSign字段会显示为NULL。
  • 用CASE语句可以生成一个直观的签署状态字段,方便快速查看结果。
  • 请根据实际表结构替换示例中的字段名(比如关联字段、姓名/位置名称字段)。

内容的提问来源于stack exchange,提问作者TimmyTurn123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:05:46