Estoy trabajando con una pequeña complicación de visualización aquí. Estoy seguro de que estoy pasando por alto una capacidad IF / ELSE.
Tengo 2 tablas que estoy consultando (clientes, direcciones). El primero tiene el registro principal, pero el segundo puede tener o no un registro al que LEFT JOIN.
Quiero mostrar un cero si no hay ningún registro en la tabla de direcciones. Y solo quiero mostrar 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 lo hace. Pero puede que esté utilizando mal COALESCE.
¿Cómo puedo mostrar un 0, si es nulo, y un 1, si existe algo?
mysql
if-statement
monitor de cafe
fuente
fuente
Respuestas:
En lugar de
COALESCE(a.addressid,0) AS addressexists
, useCASE
:o el más simple:
Esto funciona porque
TRUE
se muestra como1
en MySQL yFALSE
como0
.fuente
fuente
Tenga cuidado si viene de C / C ++ y espera que esto funcione:
Incluso si 'nombre' no es NULL, a diferencia de C, una condición falsa aún se activa y la declaración anterior devuelve 0. Por lo tanto, debe recordar verificar explícitamente NULL o una cadena vacía:
PS El ejemplo de Eugen arriba es correcto , pero quería aclarar este matiz ya que me tomó por sorpresa.
fuente
fuente
Otro método sin DÓNDE, prueba este ...
Seleccionará valores vacíos y nulos
Se establecerá en nulo si es una cadena vacía, entonces también será verdadero en eso.
fuente
De hecho, puede usar una declaración IF en las últimas versiones de MySQL.
ES DECIR:
fuente
Si está dentro de TSQL, puede probar:
SQL Server debería funcionar
fuente