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

SQL如何查询多记录存储的工单工序表中缺失锯切工序的所有工单

缺失Saw工序的工单SQL查询实现方案

你之前使用WHERE Process != 'Saw'的逻辑错误原因是,该写法仅做行级过滤,只排除了单条记录为Saw的行,没有从工单整体维度判断该工单下是否包含Saw工序,因此需要按工单维度做聚合或子查询匹配来实现需求,现有表结构完全可以满足查询要求,以下是3种常用的实现逻辑:


方案1:GROUP BY + 条件聚合(最简洁常用)

按工单号分组后,统计每个工单下Saw工序的出现次数,筛选次数为0的工单即可:

SELECT Workorder
FROM 替换为你的实际表名
GROUP BY Workorder
HAVING SUM(CASE WHEN Process = 'Saw' THEN 1 ELSE 0 END) = 0;

如果使用支持COUNT_IF函数的数据库(比如Snowflake、BigQuery等),还可以简化为:

SELECT Workorder
FROM 替换为你的实际表名
GROUP BY Workorder
HAVING COUNT_IF(Process = 'Saw') = 0;

方案2:NOT EXISTS 子查询

逻辑为筛选所有不存在对应Saw工序记录的工单:

SELECT DISTINCT t.Workorder
FROM 替换为你的实际表名 t
WHERE NOT EXISTS (
    SELECT 1
    FROM 替换为你的实际表名 t2
    WHERE t2.Workorder = t.Workorder AND t2.Process = 'Saw'
);

方案3:LEFT JOIN 空值匹配

左连接关联同一工单的Saw工序记录,关联结果为空的就是缺失该工序的工单:

SELECT DISTINCT t1.Workorder
FROM 替换为你的实际表名 t1
LEFT JOIN 替换为你的实际表名 t2
    ON t1.Workorder = t2.Workorder AND t2.Process = 'Saw'
WHERE t2.Workorder IS NULL;

以上三种方案均可正确返回示例数据中的工单号2,可根据你使用的数据库类型、表索引情况选择效率最优的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:03