Bu operatör <=> MySQL?
Diyor ki, sorguda kod bir önceki geliştirici tarafından yazılmış ve çalışıyorum
WHERE p.name <=> NULL
<=>
Bu sorguda ne anlama geliyor? Bir şey =
eşittir? Yoksa yazım hatası mı?
Ama herhangi bir hata ya da özel durumlar gösteriyor. Ben zaten <>
= !=
MySQL.
CEVAP
=
operatörü ile benzerlik
Gibi düzenli =
operatör, iki değer karşılaştırılır ve sonuç da 0
(eşit değildir) veya 1
(eşit); başka bir deyişle: 'a' <=> 'b'
verim 0
'a' <=> 'a'
verim 1
.
=
operatörü ile fark
Aksine düzenli =
operatör, değerler NULL
yok özel bir anlamı ve hiç verim NULL
gibi bir olası sonuç; yani: 'a' <=> NULL
verim 0
NULL <=> NULL
verim 1
.
Aksine =
, mademki 'a' = NULL
verim NULL
ve hatta NULL = NULL
verim NULL
; BTW, neredeyse tüm operatörler ve işlevleri MySQL işlerinde bu şekilde, çünkü karşılaştırma karşı NULL
temel olarak tanımlanmamış.
Kullanışlılık
Bu her iki işlenen NULL
içerebilir zaman için çok faydalı ve tutarlı bir karşılaştırma iki sütun arasında bir neden gerekir.
-Başka bir durumda kullanın, örneğin: hazırlanmış deyimleri ile
... WHERE col_a <=> ? ...
Burada, yer tutucu sorgu hakkında bir şey değiştirmek zorunda kalmadan ya da bir sayısal değer ya NULL
olabilir.
İlgili operatörler
Ayrıca <=>
ayrıca iki diğer operatörler de olabilir, karşılaştırın karşı NULL
, yani IS NULL
IS NOT NULL
; onlar bir parçası ANSI standart ve bu nedenle desteklenen diğer veritabanları, aksine <=>
olan MySQL özgü.
MySQL uzmanlıklar <=>
olarak düşünebilirsiniz:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Buna dayanarak, belirli bir sorgu (parça) daha fazla taşınabilir dönüştürülebilir:
WHERE p.name IS NULL
mysql tablo düştü ve son olarak işaret...
Yinelenen / aynı MySQL tablo kayıtları...
MySQL: bir Dönen birden çok sütun-satı...
nasıl mysql benim.gitti konum...
Net MySQL sunucusunu yeniden başlatmak...