Select 语句返回我不想要的数据

Select statement returning data I don't want

正在尝试排除任何有 m 或缺失的行,但它们仍然存在。

SELECT temp, wind_chill, wind_spd_flag
FROM weather
WHERE temp<0 OR wind_chill<0
AND wind_spd_flag NOT 'M' OR 'Missing';

对此很陌生,感谢您的帮助!

原创

SELECT temp, wind_chill, wind_spd_flag
FROM weather
WHERE temp<0 OR wind_chill<0
AND wind_spd_flag NOT 'M' OR 'Missing';
  1. 在 where 子句中使用 OR 时,请务必在“OR”条件周围使用 (),否则 and 将无法正常工作
  2. 不是这个或那个...是 NOT INmultiple ands

考虑 1:

SELECT temp, wind_chill, wind_spd_flag
FROM weather
WHERE (temp<0 OR wind_chill<0)
  AND wind_spd_flag NOT in ('M','Missing');

考虑 2:(<> 或 != 取决于您的环境)

SELECT temp, wind_chill, wind_spd_flag
FROM weather
WHERE (temp<0 OR wind_chill<0)
  AND wind_spd_flag <> 'M'
  AND wind_spd_Flag <> 'Missing';

为什么?

假设我们使用了没有 () 的有效语法

WHERE temp<0 OR wind_chill<0
  AND wind_spd_flag <> 'M'
  AND wind_spd_Flag <> 'Missing';

我们会得到所有 temp<0 的记录 windchill <0 的那些也必须排除 M 或 Missing 的风速。这是数学.. 从左到右没有操作顺序...需要 () 来指定您希望如何执行顺序。

因此温度 <0 且 M 或缺失仍会存在。

WHERE (temp<0 OR wind_chill<0)
  AND wind_spd_flag <> 'M'
  AND wind_spd_Flag <> 'Missing';

现在说,“首先获取 temp 或 windchill < 0 的记录”,然后从该结果集中排除 missingm;从而消除所有 M 和丢失的风速标志。

提示:() 将 OR 与 AND 组合使用时很重要