You need to enable JavaScript to run this app. MySQL关联表查询:如何按匹配条件排除整组ID的所有关联行
优惠活动
大模型
产品
解决方案
定价
更多

MySQL关联表查询:如何按匹配条件排除整组ID的所有关联行

按批次维度批量过滤关联数据的实现

原有查询的核心问题

之前的查询判断粒度停留在单条样本行层面,仅通过WHERE子句过滤单条不符合状态的QC记录,没有在BatchNo维度做合规性判断,因此只能剔除单条不合格样本,无法实现“只要批次存在不合格QC,就整体排除该批次所有关联行”的需求。同时原SQL存在拼写错误:sample_tables.SampleType 中表名多写了后缀s,执行时会报字段不存在的错误。

实现方案

整个方案完全使用标准SELECT语法实现,不涉及任何临时表创建操作,不需要特殊数据库权限,核心逻辑如下:

  • 先聚合计算筛出所有满足QC规则的合规BatchNo集合
  • 通过BatchNo匹配保留对应的所有关联行,只要批次不合规,该批次下所有普通样本、QC样本的关联行都会被整体排除

合规批次的判定规则:该批次下所有SampleType为Batch_QC_1/Batch_QC_2的样本行,不存在Status不等于'pass'的记录。

可直接运行的查询代码

SELECT 
  s.SampleNo, 
  s.SampleType, 
  s.BatchNo, 
  s.Status, 
  b.Info
FROM batch_table b
JOIN sample_table s 
  ON b.BatchNo = s.BatchNo
WHERE b.BatchNo IN (
  -- 子查询直接筛选合规BatchNo,无需创建临时表
  SELECT BatchNo
  FROM sample_table
  WHERE SampleType IN ('Batch_QC_1', 'Batch_QC_2')
  GROUP BY BatchNo
  -- 判定:QC样本中状态非pass的记录数为0
  HAVING SUM(CASE WHEN Status != 'pass' THEN 1 ELSE 0 END) = 0
)

边界规则调整

若业务要求将无QC样本的批次也判定为不合格,需整体排除该类批次,只需在聚合的HAVING判断中追加存在性校验即可:

HAVING 
  COUNT(*) > 0 -- 校验批次至少存在1条QC样本
  AND SUM(CASE WHEN Status != 'pass' THEN 1 ELSE 0 END) = 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 07:45:07