SQL WHERE条件,不等于?

Fra*_*lea 86 mysql sql where-clause negate

是否有可能否定where子句?

例如

DELETE * FROM table WHERE id != 2;
Run Code Online (Sandbox Code Playgroud)

Pra*_*obo 144

你可以这样做

DELETE FROM table WHERE id NOT IN ( 2 )
Run Code Online (Sandbox Code Playgroud)

要么

DELETE FROM table WHERE id <>  2 
Run Code Online (Sandbox Code Playgroud)

正如@Frank Schmitt所指出的,您可能也需要注意NULL值.如果要删除不2包含的所有内容(包括NULL),请添加OR id IS NULL到WHERE子句.

  • 对于那些来到这里的人来说只是一个评论,想知道为什么他们的`!= NULL`不起作用:"你不能使用算术比较运算符,如=,<或<>来测试NULL." ([来自MySQL文档](http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html)).所以这意味着你必须使用**`IS NOT NULL`. (4认同)

Fra*_*itt 30

你的问题已经被其他海报回答了,我只想指出这一点

 delete from table where id <> 2
Run Code Online (Sandbox Code Playgroud)

(或其变体,而不是id = 2等)不会删除id为NULL的行.

如果您还想删除id = NULL的行:

delete from table where id <> 2 or id is NULL
Run Code Online (Sandbox Code Playgroud)

  • +1为了捕捉我们其他人没有做过的事:) (3认同)

Fos*_*sco 12

delete from table where id <> 2
Run Code Online (Sandbox Code Playgroud)



编辑:更正MySQL的语法


Mag*_*eer 11

您可以执行以下操作:

DELETE * FROM table WHERE NOT(id = 2);
Run Code Online (Sandbox Code Playgroud)


Bra*_*don 9

使用<>否定where子句.


Nic*_*rey 7

回顾形式逻辑和代数.一个表达式

A & B & (D | E)
Run Code Online (Sandbox Code Playgroud)

可能会以某种方式否定:

因此,一般而言,任何where子句都可以根据上述规则予以否定.否定这一点

select *
from foo
where      test-1
  and      test-2
  and (    test-3
        OR test-4
      )
Run Code Online (Sandbox Code Playgroud)

select *
from foo
where NOT(          test-1
           and      test-2
           and (    test-3
                 OR test-4
               )
         )
Run Code Online (Sandbox Code Playgroud)

要么

select *
from foo
where        not test-1
  OR         not test-2
  OR   (     not test-3
         and not test-4
       )
Run Code Online (Sandbox Code Playgroud)

哪个更好?这是一个非常上下文敏感的问题.只有你可以决定.

但请注意,使用NOT会影响优化器可以或不可以执行的操作.您可能会得到一个不太理想的查询计划.


JNK*_*JNK 6

WHERE id <> 2 应该工作得很好......这就是你追求的吗?


tru*_*u.d 6

最好的解决方案是使用

DELETE FROM table WHERE id NOT IN ( 2 )
Run Code Online (Sandbox Code Playgroud)


小智 5

是的。如果我没记错的话,那应该可以。我们的您可以使用:

DELETE FROM table WHERE id <> 2
Run Code Online (Sandbox Code Playgroud)