SQL语句添加OR后返回异常数据,寻求技术排查协助
问题排查方案
- 修正逻辑优先级:AND的优先级高于OR,你当前的查询逻辑等价于
(companyID = 2 AND employeeID = 22 AND endTime IS NULL) OR endTime = 0,这会返回所有endTime=0的记录,不管companyID和employeeID是否匹配。正确写法应该把OR条件用括号包裹:SELECT id, dayType, employeeID FROM records WHERE companyID = 2 AND employeeID = 22 AND (endTime IS NULL OR endTime = 0) - 检查数据类型与实际值:
- 执行
SELECT endTime, companyID, employeeID FROM records WHERE endTime = 0,查看返回的记录是否真的满足companyID=2和employeeID=22。 - 用
SELECT TYPEOF(endTime) FROM records LIMIT 1确认endTime的数据类型,如果是日期/时间类型,0可能被转换为有效时间(如Unix纪元起始时间),而非你预期的空值替代。
- 执行
- 验证字符串类型的匹配问题:如果
endTime是字符串类型,0可能匹配'0'、'00'等非空字符串,这些值不会被IS NULL捕获,导致加OR后出现额外记录。
内容的提问来源于stack exchange,提问作者Marko
相关产品推荐
相关产品推荐

