Apakah mungkin untuk meniadakan klausa where?
misalnya
DELETE * FROM table WHERE id != 2;
Apakah mungkin untuk meniadakan klausa where?
misalnya
DELETE * FROM table WHERE id != 2;
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), tambahkan OR id IS NULL
klausa WHERE.
!= NULL
tidak berfungsi: "Anda tidak dapat menggunakan operator perbandingan aritmatika seperti =, <, atau <> untuk menguji NULL." ( dari dokumentasi MySQL ). Jadi itu artinya Anda harus menggunakan IS 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
Lihat kembali logika formal dan aljabar. Ekspresi seperti
A & B & (D | E)
dapat dinegasikan dengan beberapa cara:
Cara yang jelas:
!( A & B & ( D | E ) )
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:
!A | !B | ( !D & !E )
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.
Iya. Jika ingatanku, itu seharusnya berhasil. Kami, Anda dapat menggunakan:
DELETE FROM table WHERE id <> 2
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:
AND (isdelete is NULL or isdelete = 0)
id != NULL
tidak tidak bekerja seperti yang Anda harapkan.