为何MySQL中使用<>与OR逻辑的查询返回所有条目?
问题解析:为什么
OR条件会返回所有条目? 你遇到的问题核心是逻辑运算符OR的特性和<>(不等于)组合后的逻辑结果,我们一步步拆解:
1. 逻辑运算符OR的规则
OR表示只要任意一个条件为真,整个表达式就为真。也就是说,只要两个条件里有一个成立,该行就会被筛选出来。
2. 逐个分析不同main值的情况
不管某行的main是什么值,你的条件main <> 'soda' OR main <> 'iced tea'永远为真:
- 如果
main = 'soda':main <> 'soda'为假,但main <> 'iced tea'为真 →OR结果为真,该行被选中。 - 如果
main = 'iced tea':main <> 'iced tea'为假,但main <> 'soda'为真 →OR结果为真,该行被选中。 - 如果
main是其他值(比如柠檬汁、威士忌等):两个条件都为真 →OR结果为真,该行被选中。
所以无论main是什么,这个WHERE子句的结果都是真,自然会返回表中所有条目。
3. 正确筛选“不含这两种配料”的写法
你提到的AND才是正确的选择,因为AND要求两个条件同时为真,也就是:
SELECT drink_name FROM easy_drinks WHERE main <> 'soda' AND main <> 'iced tea';
这个条件表示:main既不等于soda,同时也不等于iced tea,只有满足这个的行才会被筛选出来。
或者也可以用NOT IN来简化写法,逻辑和上面的AND完全一致:
SELECT drink_name FROM easy_drinks WHERE main NOT IN ('soda', 'iced tea');
内容的提问来源于stack exchange,提问作者maverickar
相关产品推荐
相关产品推荐

