Soru MYSQL sözdizimi, null'ın varlığında eşit değil değerlendiriliyor


Bir mysql sorgusu ile sorun yaşıyorum. 2'nin değerlerini hariç tutmak istiyorum. Bu yüzden şunları yapacağımı düşündüm:

table products

id | name     | backorder
-------------------
1  | product1 | NULL
2  | product2 | NULL
3  | product3 | 2

SELECT name from `products` p
WHERE backorder <> '2'

Ancak, bu, istenilen ürün sonucunu vermemektedir. 1, ürün 2 Boş bir sonuç tablosu vermektedir.

Öte yandan kullanırsam

SELECT name from `products` p
WHERE backorder = '2'

Sonra üretir: product3. Ama 2'ye eşit olmayan bu kayıtları almak istiyorum.

Bir şey <> '2' ile çalışmıyor. NULL değerleri atıyor olabilir mi? Herkes bir düzeltme önerebilir. Şimdiden teşekkürler!


32
2018-04-24 08:05


Menşei


Kullanabilirsiniz NULL-safe eşitlik operatörü: WHERE NOT backorder <=> 2 - eggyal


Cevaplar:


kullanım IS NULL veya IS NOT NULL karşılaştırmak NULL çünkü bunlar sadece bilinmemektedir.

SELECT name 
from   products p
WHERE  backorder IS NULL OR backorder <> 2

44
2018-04-24 08:06



İşe yaradı. SO bana izin verdiğinde doğru işaretler. Bir soru ... bazı kayıtların içinde 1 değeri var. Değerin NULL veya 1 olduğu durumlarda izin verebilmek için bir şey yapabilmem gerekir (backorder IS NULL OR backorder = '1'). Bu şu an benim için çalışmıyor. - user1904273
Bu demoya ne dersin? sqlfiddle.com/#!2/e0e57/2 - John Woo
sadece açıklığa kavuşturmak için ikisini de almak ister misiniz NULL ve değeri ile 1? - John Woo
Evet, her şeyi istiyorum ama değer = 2 - user1904273
TAMAM. Bu işe yarıyor. Teşekkürler! - user1904273


Bunu açmak için üzgünüm

Bunu da kullanabiliriz

SELECT name 
from   products p
WHERE  COALESCE(backorder,1)  <> 2

7
2018-05-07 09:26



Bu olsa dizinleri ekleme yeteneği kırıyor - Brian Leishman


Kullanabilirsiniz:

SELECT `name` FROM `products` `p`
WHERE NOT `backorder` <=> '2'

veya

SELECT `name` FROM `products` `p`
WHERE !(`backorder` <=> '2')

6
2018-06-23 13:50





Bunu dene ve gör.

SELECT name from `products` p
WHERE backorder != '2'

-4
2018-04-24 08:06



Bunu kontrol ettin mi? - user3115056
Hayır. Bu işe yaramıyor. Operatörler <> ve != eşdeğerdir. Görmek stackoverflow.com/questions/2066987/... - Sergey Avdeev