MySQL SQL WHERE 条件不等于?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6156979/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQL WHERE condition is not equal to?
提问by Frank Vilea
Is it possible to negate a where clause?
是否可以否定 where 子句?
e.g.
例如
DELETE * FROM table WHERE id != 2;
回答by Praveen Lobo
You can do like this
你可以这样做
DELETE FROM table WHERE id NOT IN ( 2 )
OR
或者
DELETE FROM table WHERE id <> 2
As @Frank Schmitt noted, you might want to be careful about the NULL values too. If you want to delete everything which is not 2
(including the NULLs) then add OR id IS NULL
to the WHERE clause.
正如@Frank Schmitt 所指出的,您可能也想小心 NULL 值。如果您想删除所有不是2
(包括 NULL)的所有内容,请添加OR id IS NULL
到 WHERE 子句中。
回答by Frank Schmitt
Your question was already answered by the other posters, I'd just like to point out that
其他发帖人已经回答了您的问题,我只想指出
delete from table where id <> 2
(or variants thereof, not id = 2 etc) will not delete rows where id is NULL.
(或其变体,不是 id = 2 等)不会删除 id 为 NULL 的行。
If you also want to delete rows with id = NULL:
如果您还想删除 id = NULL 的行:
delete from table where id <> 2 or id is NULL
回答by Fosco
delete from table where id <> 2
edit: to correct syntax for MySQL
编辑:纠正 MySQL 的语法
回答by Magicianeer
You could do the following:
您可以执行以下操作:
DELETE * FROM table WHERE NOT(id = 2);
回答by Brandon
Use <>
to negate the where clause.
使用<>
否定where子句。
回答by Nicholas Carey
Look back to formal logic and algebra. An expression like
回顾形式逻辑和代数。像这样的表达
A & B & (D | E)
may be negated in a couple of ways:
可以通过几种方式否定:
The obvious way:
!( A & B & ( D | E ) )
The above can also be restated, you just need to remember some properties of logical expressions:
!( A & B )
is the equivalent of(!A | !B)
.!( A | B )
is the equivalent of(!A & !B)
.!( !A )
is the equivalent of (A).
Distribute the NOT (!) across the entire expression to which it applies, inverting operators and eliminating double negatives as you go along:
!A | !B | ( !D & !E )
显而易见的方法:
!( A & B & ( D | E ) )
上面也可以重述,你只需要记住逻辑表达式的一些属性:
!( A & B )
相当于(!A | !B)
。!( A | B )
相当于(!A & !B)
。!( !A )
相当于 (A)。
将 NOT (!) 分布在它适用的整个表达式中,反转运算符并消除双重否定:
!A | !B | ( !D & !E )
So, in general, any where clause may be negated according to the above rules. The negation of this
所以,一般来说,根据上述规则,任何 where 子句都可以否定。否定这个
select *
from foo
where test-1
and test-2
and ( test-3
OR test-4
)
is
是
select *
from foo
where NOT( test-1
and test-2
and ( test-3
OR test-4
)
)
or
或者
select *
from foo
where not test-1
OR not test-2
OR ( not test-3
and not test-4
)
Which is better? That's a very context-sensitive question. Only you can decide that.
哪个更好?这是一个非常上下文敏感的问题。只有你能决定。
Be aware, though, that the use of NOT can affect what the optimizer can or can't do. You might get a less than optimal query plan.
但是请注意,NOT 的使用会影响优化器能做什么或不能做什么。您可能会得到一个不太理想的查询计划。
回答by JNK
WHERE id <> 2
should work fine...Is that what you are after?
WHERE id <> 2
应该工作正常......这是你所追求的吗?
回答by dkruythoff
Yes. If memory serves me, that should work. Our you could use:
是的。如果没记错的话,那应该可行。我们你可以使用:
DELETE FROM table WHERE id <> 2
回答by trusha
Best solution is to use
最好的解决方案是使用
DELETE FROM table WHERE id NOT IN ( 2 )
回答by user2956206
I was just solving this problem. If you use <> or is not in on a variable, that is null, it will result in false. So instead of <> 1, you must check it like this:
我只是在解决这个问题。如果您使用 <> 或不在变量中,即为 null,则结果为 false。因此,您必须像这样检查它,而不是 <> 1:
AND (isdelete is NULL or isdelete = 0)