SQL SELECT查询返回非预期数据,排除M或Missing值规则未生效
SQL查询问题排查及修正
现有语句的错误点
- 逻辑运算符优先级错误:SQL中
AND优先级高于OR,原语句的WHERE条件会被默认解析为temp<0 OR (wind_chill<0 AND wind_spd_flag NOT 'M') OR 'Missing',完全不符合预期逻辑 - 不等于判断语法错误:SQL中判断值不相等需要使用
!=或<>操作符,wind_spd_flag NOT 'M'属于非法语法 - 多值排除逻辑错误:判断字段不在多个指定值中需要使用
NOT IN (值1,值2)的结构,原语句中的OR 'Missing'会被识别为布尔判断,非空字符串会被判定为真,直接导致过滤条件失效
修正后的SQL语句
SELECT temp, wind_chill, wind_spd_flag FROM weather WHERE (temp < 0 OR wind_chill < 0) AND wind_spd_flag NOT IN ('M', 'Missing');
修正说明
- 用括号包裹
temp < 0 OR wind_chill < 0,明确优先级,保证先筛选出温度或风寒指数小于0的行 - 用
NOT IN ('M', 'Missing')实现多值排除,逻辑清晰也避免出现语法错误
内容的提问来源于stack exchange,提问作者Dragamaroon
相关产品推荐
相关产品推荐

