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)