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

多条件WHERE语句优化:排除特定记录的SQL逻辑改写求助

改写后的SQL逻辑

原逻辑用OR连接三个条件会导致只要符合第一个子句就被返回,完全没起到排除后两个子句的作用。正确的逻辑应该是:先匹配第一个子句的所有基础条件,同时排除符合后两个子句任意一条的记录。

简化后的SQL WHERE子句

WHERE 
    -- 基础匹配条件(原第一个子句的全部规则)
    o.ord_billto = 'CATGRI'
    AND o.ord_status = 'CMP'
    AND o.ord_startdate >= @StartDate AND o.ord_startdate < @EndDate + 1
    AND o.ord_invoicestatus = 'XIN'
    -- 排除符合后两个子句的记录
    AND NOT (
        -- 原第二个子句的专属条件
        (o.ord_revtype4 IN ('GRIFF3') AND s.cmp_id NOT IN ('CATLAF10','ORDBEL', 'SKYLIV','SKYPLY'))
        -- 或原第三个子句的专属条件
        OR (o.ord_revtype4 IN ('GRIFF1') AND s.cmp_id NOT IN ('CATGRI02','CATWAC01'))
    )

逻辑说明

  • 先锁定所有符合基础过滤规则的记录,避免重复写相同条件
  • 通过NOT (...)包裹后两个子句的OR逻辑,确保只要符合后两个子句中任意一条的记录都被排除
  • 结构更清晰,后续维护时只需修改对应区块的条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:01:01