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?
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
.
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
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.
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
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.
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