Where句を無効にすることは可能ですか?
例えば.
DELETE * FROM table WHERE id != 2;
このようにすることができます
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句に追加します。
あなたの質問はすでに他のポスターによって答えられました、私はちょうどそれを指摘したいと思います
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の構文を修正します
次のことができます。
DELETE * FROM table WHERE NOT(id = 2);
<>
を使用して、where句を無効にします。
形式的な論理と代数を振り返ってください。のような表現
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を使用すると、オプティマイザーができることとできないことに影響することに注意してください。最適ではないクエリプランを取得する場合があります。
WHERE id <> 2
は正常に動作するはずです...それはあなたが望んでいることですか?
はい。メモリが私に役立つなら、それはうまくいくはずです。私たちはあなたが使うことができます:
DELETE FROM table WHERE id <> 2
私はこの問題を解決していました。 <>を使用するか、変数に含まれていない場合、つまりnullの場合、falseになります。したがって、<> 1の代わりに、次のようにチェックする必要があります。
AND (isdelete is NULL or isdelete = 0)