MySQL中where条件的并列查询问题
需求:用不等于的方法筛选出需要的数据
筛选出: 不是2班的张三,不是4班的张三,不是李四,不是王五 的其他人
我是这样写的
SELECT * FROM name_table where 姓名 <> '李四' and 姓名 <> '王五' and (姓名 <> '张三' and 班级 <> '2班' and 班级 <> '4班')
结果显而易见的是错的,在张三的筛选除了问题,应该如何更改
1、使用 OR
SELECT * FROM name_table WHERE ( 姓名 <> '李四' AND 姓名 <> '王五' AND 姓名 <> '张三' ) OR ( 姓名 = '张三' AND 班级 <> '2班' AND 班级 <> '4班' );
SELECT * FROM name_table where 姓名 <> '李四' and 姓名 <> '王五' and NOT (姓名 ='张三' and 班级 IN('2班', '4班'))
有帮助的话,请点采纳该答案~
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你的 SQL 查询逻辑基本正确,不过有一个问题。你使用了一个复合条件来筛选张三,即姓名不是“张三”且班级不是“2班”和“4班”。但是,这个条件可能会把不是“张三”的所有人都排除掉,因为他们的班级都不是“2班”和“4班”。
如果你想筛选出不是“2班”的张三和不是“4班”的张三,你需要使用 OR 运算符将两个条件组合起来:
SELECT * FROM name_table
WHERE 姓名 <> '李四'
AND 姓名 <> '王五'
AND (姓名 = '张三' AND 班级 <> '2班')
OR (姓名 = '张三' AND 班级 <> '4班')
这个查询将返回不是“2班”的张三、不是“4班”的张三、不是“李四”和不是“王五”的所有人。
你的逻辑分2种情况
1.叫张三,那么不能在2班或4班
2.不叫张三
所以这里应该写个或,而不是全都与在一起