TL; DR
Es el operador NULL
seguro igual .
Al igual que el =
operador regular , se comparan dos valores y el resultado es 0
(no igual) o 1
(igual); en otras palabras: 'a' <=> 'b'
rendimientos 0
y 'a' <=> 'a'
rendimientos 1
.
A diferencia del =
operador regular , los valores de NULL
no tienen un significado especial y, por lo tanto, nunca dan NULL
como resultado posible; entonces: 'a' <=> NULL
rendimientos 0
y NULL <=> NULL
rendimientos 1
.
Utilidad
Esto puede ser útil cuando ambos operandos pueden contener NULL
y necesita un resultado de comparación consistente entre dos columnas.
Otro caso de uso es con declaraciones preparadas, por ejemplo:
... WHERE col_a <=> ? ...
Aquí, el marcador de posición puede ser un valor escalar o NULL
sin tener que cambiar nada sobre la consulta.
Operadores relacionados
Además, <=>
también hay otros dos operadores que se pueden usar para comparar NULL
, a saber, IS NULL
y IS NOT NULL
; son parte del estándar ANSI y, por lo tanto, son compatibles con otras bases de datos, a diferencia de <=>
MySQL.
Puede pensar en ellos como especializaciones de MySQL <=>
:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
En base a esto, su consulta particular (fragmento) se puede convertir a la más portátil:
WHERE p.name IS NULL
Apoyo
El estándar SQL: 2003 introdujo un predicado para esto, que funciona exactamente como el <=>
operador de MySQL , en la siguiente forma:
IS [NOT] DISTINCT FROM
Lo siguiente es universalmente compatible, pero es relativamente complejo:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceship
operador