web-dev-qa-db-ja.com

SQL WHERE条件、等しくない?

Where句を無効にすることは可能ですか?

例えば.

DELETE * FROM table WHERE id != 2;
83
Frank Vilea

このようにすることができます

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句に追加します。

137
Praveen Lobo

あなたの質問はすでに他のポスターによって答えられました、私はちょうどそれを指摘したいと思います

 delete from table where id <> 2

(またはid = 2などではなく、そのバリアント)は、idがNULLの行を削除しません。

Id = NULLの行も削除する場合:

delete from table where id <> 2 or id is NULL
28
Frank Schmitt
delete from table where id <> 2



編集:MySQLの構文を修正します

12
Fosco

次のことができます。

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

<>を使用して、where句を無効にします。

8
Brandon

形式的な論理と代数を振り返ってください。のような表現

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
Nicholas Carey

WHERE id <> 2は正常に動作するはずです...それはあなたが望んでいることですか?

6
JNK

はい。メモリが私に役立つなら、それはうまくいくはずです。私たちはあなたが使うことができます:

DELETE FROM table WHERE id <> 2
4
dkruythoff

私はこの問題を解決していました。 <>を使用するか、変数に含まれていない場合、つまりnullの場合、falseになります。したがって、<> 1の代わりに、次のようにチェックする必要があります。

 AND (isdelete is NULL or isdelete = 0)
0
user2956206