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 NOT(id = 2);
delete from table where id <> 2
編集:MySQLの構文を修正する
<>
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)