2009-09-17 21 views
61

Supongamos la siguiente tabla (por ejemplo, el resultado de varios combinación interna declaraciones):MySQL: NULL Encasillamiento a 0

id | column_1 | column_2 
------------------------ 
1 | 1  | 
2 | 2  | 2 
3 |   | 3 

lo que podría, por ejemplo, obtener de la siguiente declaración:

select a.id, t1.column_1, t2.column_2 
from a 
left join t1 on a.id = t1.id 
left join t2 on a.id = t2.id 

Ahora, si me gustaría resumir t1.column_1 y t2.column_2 de la siguiente manera

select 
    a.id, 
    t1.column_1, 
    t2.column_2, 
    (t1.column_1 + t2.column_2) as cumulated 
from a 
left join t1 on a.id = t1.id 
left join t2 on a.id = t2.id 

El reslut pantalla es la siguiente:

id | column_1 | column_2 | cumulated 
------------------------------------ 
1 | 1  | NULL  | NULL 
2 | 2  | 2  | 4 
3 | NULL | 3  | NULL 

Mi pregunta básicamente es: ¿hay alguna manera de encasillar NULL en 0 para hacer algunas matemáticas?

He intentado CONVERT(t1.column_1, SIGNED) y CAST(t1.column_1 as SIGNED), pero un NULL se queda en NULL.

Respuesta

121

Utilice IFNULL(column, 0) para convertir el valor de la columna a cero. Alternativamente, la función COALESCE hará lo mismo, excepto que (1) COALESCE es ANSI-compatible, IFNULL no lo es y (2) COALESCE toma un número arbitrario de columnas/valores y devolverá el primer valor no nulo que se le pase .

+0

y se puede combinar para tener más de un valor? –

+7

Sí ... así COALESCE (columna1, columna2, 0) devolverá el primer valor no nulo de estos valores. Tenga en cuenta que esto funciona de forma horizontal, no vertical. Las columnas deben pertenecer a la misma fila de la tabla. –

+0

@David: Bien hecho. –