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
相关产品推荐
相关产品推荐

