SQL WHERE条件,不等于?

时间:2011-05-27 19:45:33

标签: mysql sql where negate

是否可以否定where子句?

e.g。

DELETE * FROM table WHERE id != 2;

10 个答案:

答案 0 :(得分:133)

你可以这样做

DELETE FROM table WHERE id NOT IN ( 2 )

OR

DELETE FROM table WHERE id <>  2 

正如@Frank Schmitt所指出的,您可能也要小心NULL值。如果要删除不是2的所有内容(包括NULL),请将OR id IS NULL添加到WHERE子句中。

答案 1 :(得分:26)

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

 delete from table where id <> 2

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

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

delete from table where id <> 2 or id is NULL

答案 2 :(得分:12)

delete from table where id <> 2



编辑:更正MySQL的语法

答案 3 :(得分:10)

您可以执行以下操作:

DELETE * FROM table WHERE NOT(id = 2);

答案 4 :(得分:7)

使用<>否定where子句。

答案 5 :(得分:6)

WHERE id <> 2应该可以正常工作......那就是你所追求的吗?

答案 6 :(得分:6)

回顾形式逻辑和代数。像

这样的表达式
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会影响优化程序可以或不可以执行的操作。您可能会得到一个不太理想的查询计划。

答案 7 :(得分:3)

是。如果记忆为我服务,那应该有用。 我们可以使用:

DELETE FROM table WHERE id <> 2

答案 8 :(得分:2)

最好的解决方案是使用

DELETE FROM table WHERE id NOT IN ( 2 )

答案 9 :(得分:0)

我刚刚解决了这个问题。如果您使用&lt;&gt;或者不在变量上,即为null,它将导致false。所以而不是&lt;&gt; 1,你必须这样检查:

 AND (isdelete is NULL or isdelete = 0)