SQL WHERE条件,不等于?
是否可以否定where子句?
例如
DELETE * FROM table WHERE id != 2;
你可以这样做
DELETE FROM table WHERE id NOT IN ( 2 )
要么
DELETE FROM table WHERE id <> 2
正如@Frank Schmitt指出的那样,您可能也要小心NULL值。 如果你想删除不是2
所有东西(包括NULL),那么把OR id IS NULL
添加到WHERE子句中。
你的问题已经被其他海报回答了,我只想指出
delete from table where id <> 2
(或其变体,不是id = 2等)不会删除id为NULL的行。
如果您还想删除id = NULL的行:
delete from table where id <> 2 or id is NULL
delete from table where id <> 2
编辑:更正MySQL的语法
使用<>
来否定where子句。
WHERE id <> 2
应该可以正常工作…那是你在做什么之后?
回顾forms逻辑和代数。 一个expression式
A & B & (D | E)
可能会以几种方式否定:
-
显而易见的方式:
!( A & B & ( D | E ) )
-
上面也可以重述,你只需要记住一些逻辑expression式的属性:
-
!( A & B )
相当于(!A | !B)
。 -
!( A | B )
相当于(!A & !B)
。 -
!( !A )
相当于(A)。
将NOT(!)分布在整个expression式中,反转运算符并消除双重否定符号:
!A | !B | ( !D & !E )
-
所以,一般来说,根据上述规则,任何where子句都可能被否定。 否定这一点
select * from foo where test-1 and test-2 and ( test-3 OR test-4 )
是
select * from foo where NOT( test-1 and test-2 and ( test-3 OR test-4 ) )
要么
select * from foo where not test-1 OR not test-2 OR ( not test-3 and not test-4 )
哪个更好? 这是一个非常敏感的问题。 只有你可以决定。
但请注意,使用NOT会影响优化器可以或不可以执行的操作。 您可能会得到不太理想的查询计划。
你可以做到以下几点:
DELETE * FROM table WHERE NOT(id = 2);
是。 如果记忆为我服务,那应该工作。 我们可以使用:
DELETE FROM table WHERE id <> 2
我只是解决这个问题。 如果使用<>或不在variables上,则为空,则会导致错误。 因此,而不是<> 1,你必须像这样检查:
AND (isdelete is NULL or isdelete = 0)