SQL NEREDE koşulu eşit değildir?


Yanıtlar:


162

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. 2Olmayan (NULL'lar dahil) her şeyi silmek istiyorsanız OR id IS NULL, WHERE yan tümcesine ekleyin .


Bu komutu birkaç kez denedim .. ama
MySQL'de DELETE'in

İşte buyrun, * İşaret ettiğiniz için teşekkürler.
Praveen Lobo

5
Buraya gelip neden != 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.
Byson

31

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

12
delete from table where id <> 2



edit: MySQL için sözdizimini düzeltmek için


12

Şunları yapabilirsiniz:

DELETE * FROM table WHERE NOT(id = 2);

1
Değer sayısal değilse iyi çalışır WHERE NOT (id = 'iki');
Kareem


7

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.


6

WHERE id <> 2 iyi çalışmalı ... Peşinde olduğun şey bu mu?


4

Evet. Hafıza bana hizmet ediyorsa, bu işe yaramalı. Bizim kullanabilirsiniz:

DELETE FROM table WHERE id <> 2

3

En iyi çözüm kullanmaktır

DELETE FROM table WHERE id NOT IN ( 2 )

0

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.