2009-09-17 53 views
61

讓我們假設下面的表(例如數內的結果來聯合聲明):MySQL的:鑄字NULL 0

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

,你可以從例如下面的語句得到:

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 

現在,如果我想如下

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 
總結t1.column_1和t2.column_2

的reslut將如下所示:

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

我的問題主要是:有沒有辦法來強制轉換爲NULL 0,以做一些數學?

我試過CONVERT(t1.column_1, SIGNED)CAST(t1.column_1 as SIGNED),但NULL保持NULL

回答

121

使用IFNULL(column, 0)將列值轉換爲零。或者,COALESCE函數也會執行相同的操作,除了(1)COALESCE符合ANSI標準,IFNULL不符合以及(2)COALESCE採用任意數量的列/值並將返回傳遞給它的第一個非空值。

+0

和coalesce可以有多個值? – 2009-09-17 21:07:41

+7

是......所以COALESCE(column1,column2,0)將返回這些值的第一個非空值。請記住,這是水平工作,而不是垂直工作。這些列必須屬於同一個表格行。 – 2009-09-17 21:15:01

+0

@David:幹得好。 – 2009-09-18 05:19:34