SQL中如何表示“不等于且不小于”的比较筛选条件
SQL实现「数值既不等于0也不小于0」的WHERE子句写法
原有写法的错误原因
- 第一种写法
WHERE amount (<> 0 or < 0)存在两个问题:- SQL语法要求每个比较表达式必须是完整的
字段 运算符 值结构,不能把字段名抽到括号外共用,括号内的< 0缺少左侧字段名,直接触发语法错误 - 逻辑关系错误:需求是*同时排除「等于0」和「小于0」*两种情况,用
OR连接会匹配所有满足任意一个条件的行,逻辑恒真,完全达不到筛选效果
- SQL语法要求每个比较表达式必须是完整的
- 第二种写法
WHERE amount !<= 0的问题:SQL标准不存在!<=这类组合式的否定比较运算符,自定义拼接的运算符无法被SQL解析器识别,直接触发语法错误
正确写法
你的筛选需求本质是匹配大于0的数值,最简洁高效的写法直接用大于运算符即可:
WHERE amount > 0
如果要严格按照「排除等于0、排除小于0」的拆分逻辑书写,注意用AND连接两个完整的比较表达式:
WHERE amount <> 0 AND amount >= 0
也可以通过NOT对整体判断条件取反实现,符合德摩根定律转换规则,效果和上面两种写法完全一致:
WHERE NOT (amount = 0 OR amount < 0)
注意:不同SQL方言对不等于运算符的支持略有差异,除了标准的
<>,部分数据库也支持!=写法,但<>是ANSI SQL标准规定的写法,跨数据库兼容性更好。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

