SQL WHERE 条件不等于?

有可能否定 where 子句吗?

例如:。

DELETE * FROM table WHERE id != 2;
281256 次浏览
delete from table where id <> 2



edit: to correct syntax for MySQL

You can do like this

DELETE FROM table WHERE id NOT IN ( 2 )

OR

DELETE FROM table WHERE id <>  2

As @Frank Schmitt noted, you might want to be careful about the NULL values too. If you want to delete everything which is not 2(including the NULLs) then add OR id IS NULL to the WHERE clause.

Use <> to negate the where clause.

You could do the following:

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

WHERE id <> 2 should work fine...Is that what you are after?

Yes. If memory serves me, that should work. Our you could use:

DELETE FROM table WHERE id <> 2

Look back to formal logic and algebra. An expression like

A & B & (D | E)

may be negated in a couple of ways:

  • The obvious way:

    !( A & B & ( D | E ) )
    
  • The above can also be restated, you just need to remember some properties of logical expressions:

    • !( A & B ) is the equivalent of (!A | !B).
    • !( A | B ) is the equivalent of (!A & !B).
    • !( !A ) is the equivalent of (A).

    Distribute the NOT (!) across the entire expression to which it applies, inverting operators and eliminating double negatives as you go along:

        !A | !B | ( !D & !E )
    

So, in general, any where clause may be negated according to the above rules. The negation of this

select *
from foo
where      test-1
and      test-2
and (    test-3
OR test-4
)

is

select *
from foo
where NOT(          test-1
and      test-2
and (    test-3
OR test-4
)
)

or

select *
from foo
where        not test-1
OR         not test-2
OR   (     not test-3
and not test-4
)

Which is better? That's a very context-sensitive question. Only you can decide that.

Be aware, though, that the use of NOT can affect what the optimizer can or can't do. You might get a less than optimal query plan.

Your question was already answered by the other posters, I'd just like to point out that

 delete from table where id <> 2

(or variants thereof, not id = 2 etc) will not delete rows where id is NULL.

If you also want to delete rows with id = NULL:

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

I was just solving this problem. If you use <> or is not in on a variable, that is null, it will result in false. So instead of <> 1, you must check it like this:

 AND (isdelete is NULL or isdelete = 0)

Best solution is to use

DELETE FROM table WHERE id NOT IN ( 2 )