MySQL: Typecasting NULL auf 0

82

Nehmen wir die folgende Tabelle an (z. B. ein Ergebnis mehrerer innerer Join-Anweisungen):

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

Was Sie zum Beispiel aus folgender Aussage erhalten könnten:

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

Nun, wenn ich t1.column_1 und t2.column_2 wie folgt zusammenfassen möchte

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

Das Reslut sieht wie folgt aus:

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

Meine Frage ist im Grunde: Gibt es eine Möglichkeit, NULL in 0 zu tippen, um etwas zu rechnen?

Ich habe es versucht CONVERT(t1.column_1, SIGNED)und CAST(t1.column_1 as SIGNED), aber ein NULLbleibt ein NULL.

Pierre Spring
quelle

Antworten:

154

Verwenden Sie IFNULL(column, 0)diese Option , um den Spaltenwert in Null zu konvertieren. Alternativ führt die COALESCE-Funktion dasselbe aus, außer dass (1) COALESCEANSI-kompatibel IFNULList, nicht und (2) COALESCEeine beliebige Anzahl von Spalten / Werten verwendet und den ersten an sie übergebenen Nicht-Null-Wert zurückgibt.

David Andres
quelle
und Koaleszenz kann mehr als einen Wert haben?
ante.sabo
10
Ja ... also gibt COALESCE (Spalte1, Spalte2, 0) den ersten Nicht-Nullwert dieser Werte zurück. Beachten Sie, dass dies horizontal und nicht vertikal funktioniert. Die Spalten müssen zur selben Tabellenzeile gehören.
David Andres
@rexem: Danke, das ist sehr nett von dir zu sagen. Sehr geschätzt!
David Andres
@ David Andres Eine Million Dankeschön. Wenn ich nur ein zweites Mal abstimmen könnte.
Geschichte