回答:
あなたはこのようにすることができます
DELETE FROM table WHERE id NOT IN ( 2 )
または
DELETE FROM table WHERE id <> 2
@Frank Schmittが述べたように、NULL値にも注意する必要があるかもしれません。2
含まれていないもの(NULLを含む)をすべて削除する場合はOR id IS NULL
、WHERE句に追加します。
!= NULL
ないのかと不思議に思っている人への一般的なコメント:「=、<、<>などの算術比較演算子を使用してNULLをテストすることはできません。」(MySQLドキュメントから)。つまり、を使用 する必要があるということですIS NOT NULL
。
あなたの質問はすでに他のポスターで答えられています、私はそれを指摘したいのですが
delete from table where id <> 2
(またはid = 2などではなく、その変形)は、idがNULLである行を削除しません。
id = NULLの行も削除したい場合:
delete from table where id <> 2 or id is NULL
形式的な論理と代数を振り返ってみましょう。のような表現
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を使用すると、オプティマイザが実行できることまたは実行できないことに影響する可能性があることに注意してください。最適なクエリプランが得られない可能性があります。
はい。記憶が私に役立つなら、それはうまくいくはずです。私たちが使用できるもの:
DELETE FROM table WHERE id <> 2
私はこの問題を解決していました。<>を使用するか、変数にない場合、つまりnullの場合、結果はfalseになります。したがって、<> 1の代わりに、次のようにチェックする必要があります。
AND (isdelete is NULL or isdelete = 0)
id != NULL
機能しません。