2012-02-22 27 views
73

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.MySQL IF NOT NULL, luego mostrar 1, else mostrar 0

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

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

Lo 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 lo hace. Pero puedo estar utilizando COALESCE mal.

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

+0

posible duplicado de [Caso NOT NULL condicional SQL] (http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal

Respuesta

154

En lugar de COALESCE(a.addressid,0) AS addressexists, utilice CASE:

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

o la más simple:

(a.addressid IS NOT NULL) AS addressexists 

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

+19

+1 para el (a.addressid IS NOT NULL) AS addressexists – Simon

+0

perfecto, gracias – Vignesh

+0

gracias esto me salvó la vida! –

12
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 
72
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 
14

cuidado si usted está viniendo de C/C++ y esperando que esto funcione:

select if(name, 1, 0) .. 

Incluso si 'nombre' no es NULL, a diferencia de C, una falsa condición todavía activa y la declaración anterior devuelve 0. por lo tanto, usted tiene que recordar para comprobar explícitamente NULL o una cadena vacía:

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

PS Eugen's example up above is correct, pero quería aclarar este matiz ya que me tomó por sorpresa.

1

Otro método sin DONDE, probar este ..

Seleccionará vacío y valores nulos

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

esta forma se establece un valor nulo si es una cadena vacía, a continuación, ser cierto en eso también.

+0

También es útil: seleccione IFNULL (fieldname, "1") de tablename; – Hariboo