如何解决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值。如果要删除所有非ѭ3的内容(包括NULL),请在WHERE子句中添加ѭ4。
, 您的问题已经被其他海报回答,我想指出的是
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的语法
, 您可以执行以下操作:
DELETE * FROM table WHERE NOT(id = 2);
, 使用ѭ9否定where子句。
, 回顾形式逻辑和代数。像这样的表达
A & B & (D | E)
可以通过以下两种方式取反:
明显的方法:
!( A & B & ( D | E ) )
上面的内容也可以重述,您只需要记住逻辑表达式的一些属性即可:
!( A & B )
等于(!A | !B)
。
!( A | B )
等于(!A & !B)
。
!( !A )
等于(A)。
将NOT(!)分布到它所应用的整个表达式中,取反
运算符,并消除双重负面影响:
!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可能会影响优化器的工作范围。您可能会得到一个不太理想的查询计划。
, WHERE id <> 2
应该可以正常工作...那是您的追求吗?
, 是。如果记忆能为我服务,那应该可以。
我们可以使用:
DELETE FROM table WHERE id <> 2
, 最好的解决方案是使用
DELETE FROM table WHERE id NOT IN ( 2 )
, 我只是在解决这个问题。如果使用<>或不在变量上,即为null,则结果为false。因此,您必须像这样检查而不是<> 1:
AND (isdelete is NULL or isdelete = 0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。