Apakah mungkin untuk meniadakan klausa where?
misalnya
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Frank Vilea
sumber
sumber
id != NULL
tidak tidak bekerja seperti yang Anda harapkan.Jawaban:
Anda bisa melakukan seperti ini
DELETE FROM table WHERE id NOT IN ( 2 )
ATAU
DELETE FROM table WHERE id <> 2
Seperti yang dicatat oleh @Frank Schmitt, Anda mungkin ingin berhati-hati dengan nilai NULL juga. Jika Anda ingin menghapus semua yang tidak
2
(termasuk NULL), tambahkanOR id IS NULL
klausa WHERE.sumber
!= NULL
tidak berfungsi: "Anda tidak dapat menggunakan operator perbandingan aritmatika seperti =, <, atau <> untuk menguji NULL." ( dari dokumentasi MySQL ). Jadi itu artinya Anda harus menggunakanIS NOT NULL
.Pertanyaan Anda sudah dijawab oleh poster lain, saya hanya ingin menunjukkannya
delete from table where id <> 2
(atau variannya, bukan id = 2 dll) tidak akan menghapus baris di mana id adalah NULL.
Jika Anda juga ingin menghapus baris dengan id = NULL:
delete from table where id <> 2 or id is NULL
sumber
delete from table where id <> 2
edit: untuk memperbaiki sintaks MySQL
sumber
Anda dapat melakukan hal berikut:
DELETE * FROM table WHERE NOT(id = 2);
sumber
Gunakan
<>
untuk meniadakan klausa where.sumber
Lihat kembali logika formal dan aljabar. Ekspresi seperti
dapat dinegasikan dengan beberapa cara:
Cara yang jelas:
Hal di atas juga dapat disajikan kembali, Anda hanya perlu mengingat beberapa properti ekspresi logis:
!( A & B )
setara dengan(!A | !B)
.!( A | B )
setara dengan(!A & !B)
.!( !A )
setara dengan (A).Distribusikan NOT (!) Di seluruh ekspresi yang diterapkan, membalikkan operator dan menghilangkan negatif ganda saat Anda melanjutkan:
Jadi, secara umum, klausa mana saja dapat dinegasikan menurut aturan di atas. Penolakan ini
select * from foo where test-1 and test-2 and ( test-3 OR test-4 )
adalah
select * from foo where NOT( test-1 and test-2 and ( test-3 OR test-4 ) )
atau
select * from foo where not test-1 OR not test-2 OR ( not test-3 and not test-4 )
Mana yang lebih baik? Itu pertanyaan yang sangat sensitif konteks. Hanya Anda yang bisa memutuskan itu.
Namun, ketahuilah bahwa penggunaan TIDAK dapat memengaruhi apa yang dapat atau tidak dapat dilakukan oleh pengoptimal. Anda mungkin mendapatkan paket kueri yang kurang optimal.
sumber
WHERE id <> 2
seharusnya bekerja dengan baik ... Itukah yang Anda kejar?sumber
Iya. Jika ingatanku, itu seharusnya berhasil. Kami, Anda dapat menggunakan:
DELETE FROM table WHERE id <> 2
sumber
Solusi terbaik adalah menggunakan
DELETE FROM table WHERE id NOT IN ( 2 )
sumber
Saya baru saja memecahkan masalah ini. Jika Anda menggunakan <> atau tidak dalam variabel, yaitu null, maka akan menghasilkan false. Jadi alih-alih <> 1, Anda harus memeriksanya seperti ini:
sumber