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

MySQL实现:若存在Cancellation则移除对应Nr的所有相关行

用WHERE子句过滤已核销发票,生成未结头寸列表

需求说明

需要生成清晰的未结头寸列表供销售/财务查看,规则是:当某张Invoice存在对应的Cancellation记录时,同时移除该Invoice和Cancellation行,最终仅保留无对应核销记录的Invoice。

原始数据

IDNrTypeAmount
1NR-100Invoice100
2NR-101Invoice200
3NR-102Invoice300
4NR-100Cancellation100
5NR-102Cancellation300
6NR-103Invoice150

预期结果

IDNrTypeAmount
2NR-101Invoice200
6NR-103Invoice150

解决方案(WHERE子句实现)

以下两种方案均通过WHERE子句完成过滤,精准匹配需求:

方案1:NOT EXISTS子查询

直接在WHERE中判断当前Invoice的编号不存在对应的Cancellation记录:

SELECT *
FROM your_table
WHERE Type = 'Invoice'
  AND NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.Nr = your_table.Nr
      AND t2.Type = 'Cancellation'
);

方案2:LEFT JOIN + 空值判断

通过左关联匹配Cancellation记录,再过滤掉有匹配的Invoice:

SELECT t1.*
FROM your_table t1
LEFT JOIN your_table t2
  ON t1.Nr = t2.Nr
  AND t2.Type = 'Cancellation'
WHERE t1.Type = 'Invoice'
  AND t2.ID IS NULL;

说明

  • 两种方案都会自动排除所有Cancellation行,同时移除有对应核销记录的Invoice,完全符合未结头寸的要求。
  • 若此前使用GROUP BY未得到预期结果,大概率是未明确限定Type = 'Invoice',或未正确判断该编号是否存在有效的Cancellation记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:31