SQL语句的WHERE中,满足多个不等于的条件

SELECT * FROM TABLE1 WHERE (ID<>'XX' AND NAME<>'YY')
期望的结果是,ID不等于XX,而且NAME不等于YY的数据被检索。
但是,现在的运行结果是,所有ID不等于XX的都被检索了。
例如:TABLE1为
ID NAME
XX XX
XX YY
XX ZZ
AA BB
期望的结果为检索出
ID NAME
XX XX
XX ZZ

AA BB

题目有问题,或者作者sql再运行时写错了。猜测:
1.作者想要的结果是,id等于xx但是name不等于yy记录,这样查询出三个结果是正确的,where条件应该写成where id='xx' and name<>'yy'
2.作者想要的结果是id不等于xx并且name不等于yy的记录,这样查询出的结果应该是一条,就是那条yy bb的记录,where条件没问题,where id<>'xx' and name<>'yy'
3.楼上各位,与或非的转换,再sql里就是and和or的转换,等于和不等于的转换。如,id='xx' and name='yy'等价于(id<>'xx' or name<>'yy')
4.作者的“不等号”,建议使用“!=”,不知道你用的是什么数据库,会不会是“<>”有问题了。追答

不等号不让输入啊,回复里的两个尖括号都没显示出来

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-08-11

根据你的期望结果,貌似你要排除掉ID='XX' AND NAME='YY'这一条记录,根据中学数学,"!(A&&B)"等价于"A||B",所以有2种写法:

SELECT * FROM TABLE1 WHERE NOT (ID='XX' AND NAME='YY')
SELECT * FROM TABLE1 WHERE ID<>'XX' or NAME<>'YY'

第2个回答  2019-04-26
根据你的期望结果,貌似你要排除掉ID='XX' AND NAME='YY'这一条记录,根据中学数学,"!(A&&B)"等价于"A||B",所以有2种写法:
12SELECT * FROM TABLE1 WHERE NOT (ID='XX' AND NAME='YY')SELECT * FROM TABLE1 WHERE ID<>'XX' or NAME<>'YY'
第3个回答  2019-04-28
比如 a and (b) :a如果不满足的话 ,应该是不会 判断(b) 的情况的。
a 如果满足的话,才会判断 (b) 的条件

(b) 用括号括起来, 并不表示其 计算时间上的先后顺序, 而是逻辑上的 优先级。
用 (b) 的结果 和 a 进行逻辑判断, 而不会 把(b)内部的内容 和 a 放到一起进行 进行判断
第4个回答  2013-11-09

应该是这样吧

SELECT * FROM TABLE1 WHERE NAME<>'YY'

追问

这样的话,ID没有体现出来啊。
ID'XX',没有处理啊。

追答SELECT * FROM TABLE1 WHERE ID<>'XX' OR NAME<>'YY'

相似回答