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

SQL多条件过滤数据时不符合规则的记录仍返回如何解决

问题原因

SQL中AND运算符的优先级高于OR,你编写的查询条件未做括号分组,实际执行逻辑和预期不符,等效于如下逻辑:

WHERE 
  (BranchID = 6 AND MachIsTransfered = 0)
  OR (BranchID = 6 AND MachIsBorrowed = 1)
  OR (BranchID = 6 AND MachIsloaning = 1 AND NewSiteID = 6)
  OR (NewSiteID = '')

只要记录满足四个分组中的任意一个就会被返回,所以满足BranchID = 6 AND MachIsTransfered = 0的记录无论NewSiteID取值是什么,都会命中条件被查询出来,这就是M08记录不符合规则却被返回的原因。

修正方案

按照你的业务规则,将同层级的条件用括号明确分组,修正后的查询如下:

SELECT tbMachines.MachIsTransfered, tbMachines.NewSiteID
FROM tbMachines
WHERE 
  BranchID = 6
  AND (MachIsTransfered = 0 OR MachIsBorrowed = 1 OR MachIsloaning = 1)
  AND (NewSiteID = 6 OR NewSiteID = '')

修正后所有返回的记录必须同时满足三个要求:

  • BranchID等于6
  • 三个设备状态字段满足任意一个
  • NewSiteID等于6或者为空
    完全符合预设的过滤规则,异常记录会被过滤掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:05