Where cümlesini reddetmek mümkün müdür?
Örneğin
DELETE * FROM table WHERE id != 2;
Where cümlesini reddetmek mümkün müdür?
Örneğin
DELETE * FROM table WHERE id != 2;
Yanıtlar:
Bunu beğenebilirsin
DELETE FROM table WHERE id NOT IN ( 2 )
VEYA
DELETE FROM table WHERE id <> 2
@Frank Schmitt'in de belirttiği gibi, NULL değerleri konusunda da dikkatli olmak isteyebilirsiniz. 2
Olmayan (NULL'lar dahil) her şeyi silmek istiyorsanız OR id IS NULL
, WHERE yan tümcesine ekleyin .
!= NULL
çalışmadıklarını merak edenler için sadece genel bir yorum : "NULL'u test etmek için =, <veya <> gibi aritmetik karşılaştırma operatörlerini kullanamazsınız." ( MySQL belgelerinden ). Bu, kullanmanız gerektiği anlamına gelir IS NOT NULL
.
Sorunuz zaten diğer posterler tarafından cevaplandı, sadece şunu belirtmek isterim
delete from table where id <> 2
(veya bunun varyantları, id = 2 vb. değil) id'nin NULL olduğu satırları silmez.
Ayrıca id = NULL olan satırları da silmek istiyorsanız:
delete from table where id <> 2 or id is NULL
Şunları yapabilirsiniz:
DELETE * FROM table WHERE NOT(id = 2);
Biçimsel mantık ve cebire geri dönün. Gibi bir ifade
A & B & (D | E)
birkaç şekilde reddedilebilir:
Bariz yol:
!( A & B & ( D | E ) )
Yukarıdakiler de yeniden ifade edilebilir, sadece mantıksal ifadelerin bazı özelliklerini hatırlamanız gerekir:
!( A & B )
eşdeğeridir (!A | !B)
.!( A | B )
eşdeğeridir (!A & !B)
.!( !A )
(A) 'ya eşdeğerdir.NOT (!) 'U, uygulandığı tüm ifadeye dağıtın, işleçleri ters çevirin ve ilerledikçe çift negatifleri ortadan kaldırın:
!A | !B | ( !D & !E )
Bu nedenle, genel olarak herhangi bir where cümlesi yukarıdaki kurallara göre reddedilebilir. Bunun yadsınması
select *
from foo
where test-1
and test-2
and ( test-3
OR test-4
)
dır-dir
select *
from foo
where NOT( test-1
and test-2
and ( test-3
OR test-4
)
)
veya
select *
from foo
where not test-1
OR not test-2
OR ( not test-3
and not test-4
)
Hangisi daha iyi? Bu çok bağlama duyarlı bir soru. Buna sadece sen karar verebilirsin.
Bununla birlikte, NOT kullanımının optimize edicinin yapabileceklerini veya yapamayacaklarını etkileyebileceğini unutmayın. Optimalden daha az bir sorgu planı elde edebilirsiniz.
Evet. Hafıza bana hizmet ediyorsa, bu işe yaramalı. Bizim kullanabilirsiniz:
DELETE FROM table WHERE id <> 2
Ben sadece bu sorunu çözüyordum. <> Kullanırsanız veya bir değişken üzerinde değilse, yani boşsa, bu yanlışla sonuçlanacaktır. Yani <> 1 yerine şu şekilde kontrol etmelisiniz:
AND (isdelete is NULL or isdelete = 0)
id != NULL
yok değil beklediğiniz gibi çalışır.