MySQL SI NO ES NULL, entonces muestra 1, de lo contrario muestra 0


Estoy trabajando con una pequeña complicación de visualización aquí. Estoy seguro de que hay una capacidad IF/ELSE que estoy pasando por alto.

Tengo 2 tablas que estoy consultando (clientes, direcciones). El primero tiene el registro principal, pero el segundo puede o no tener un registro para UNIRSE a LA IZQUIERDA.

Quiero mostrar un cero si no hay registro en la tabla de direcciones. Y quiero mostrar solo 1, si existe un registro.

Lo que he intentado hasta ahora:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

Este primer ejemplo no haciéndolo. Pero puede que esté utilizando COALESCE mal.

¿Cómo puedo mostrar un 0, si es nulo, y un 1, si existe algo?

Author: coffeemonitor, 2012-02-22

5 answers

En Lugar de COALESCE(a.addressid,0) AS addressexists, use CASE:

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

O lo más simple:

(a.addressid IS NOT NULL) AS addressexists

Esto funciona porque TRUE se muestra como 1 en MySQL y FALSE como 0.

 169
Author: ypercubeᵀᴹ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-22 01:16:30
SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
 78
Author: Eugen Rieck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-22 01:17:38

Cuidado si vienes de C/C++ y esperas que esto funcione:

select if(name, 1, 0) ..

Incluso si 'name' no es NULL, a diferencia de C, una condición false todavía se activa y la sentencia anterior devuelve 0. Por lo tanto, debe recordar verificar explícitamente la cadena NULA o vacía:

 select if(name is null or name = '', 0, 1)

PS El ejemplo de Eugen arriba es correcto, pero quería aclarar este matiz ya que me tomó por sorpresa.

 14
Author: Debriter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:27
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123
 13
Author: bucko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-23 16:40:49

Otro método sin DÓNDE, pruebe esto..

Seleccionará valores vacíos y NULOS

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

Establecerá null si es una cadena vacía, entonces será true en eso también.

 2
Author: PodTech.io,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-02 06:54:30