Answers:
你可以这样
DELETE FROM table WHERE id NOT IN ( 2 )
要么
DELETE FROM table WHERE id <> 2
正如@Frank Schmitt指出的那样,您可能还需要注意NULL值。如果要删除所有不是的内容2
(包括NULL),则添加OR id IS NULL
到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可能会影响优化器的工作范围。您可能会得到一个不太理想的查询计划。
是。如果我有记忆,那应该可以。我们可以使用:
DELETE FROM table WHERE id <> 2
id != NULL
并没有工作,因为你所期望的。