SQL Server中如何一次性排除Type='B'、ID=1或Color='red'的记录?
问题分析与解决方案
你的问题出在逻辑运算符的使用上:你想排除所有满足「Type='B' 或 ID=1 或 Color='red'」的记录,但你写的Where Type <> 'B' OR ID <> 1 OR Color <> 'red'会保留几乎所有记录——只要任意一个条件不满足(比如某条记录Type='B'但ID≠1,它会因为ID<>1被保留),这和你的预期完全相反。
正确的SQL写法有两种:
写法1:直接取反
用NOT包裹你要排除的条件组合:
WHERE NOT (Type = 'B' OR ID = 1 OR Color = 'red')
写法2:德摩根定律转换
根据逻辑运算的德摩根定律,NOT (A OR B OR C)等价于NOT A AND NOT B AND NOT C,所以也可以写成:
WHERE Type <> 'B' AND ID <> 1 AND Color <> 'red'
这两种写法都能一次性过滤掉所有符合「Type='B'、ID=1或Color='red'」的记录,得到你想要的预期结果。
内容的提问来源于stack exchange,提问作者corydon
相关产品推荐
相关产品推荐

