2011-08-19 102 views
0

例如,我有一個空的表'A'與列:number(INT)id
我知道在MySQL null + number返回null。但是,有使用IFNULL功能的解決方法:如何選擇一個空表,但在結果中獲得一行(NULL +數字)?

SELECT IFNULL(NULL, 0) + @number 

將返回@number。但是,如果我試圖從現有的表中選擇,結果是不一樣的:

SELECT IFNULL(number, 0) + @number FROM A 

讓我沒有選擇行的結果。

我怎樣才能讓MySQL顯示一行'數字'是一個數字,所以我可以插入最小@數字使用REPLACE陳述到表A?
也許有另一種方式..?

+0

如果表有1行,如果是2,你會得到什麼結果?我希望你正在嘗試在整個表上進行計數,總計或其他聚合,你想添加一個數字是否正確? – Eddy

+0

我不明白你在問什麼。也許樣本數據和預期輸出將有助於/ – Bohemian

+0

我的計劃是保存與表A中的id相關的最小initeger(> 0)。在某些條件(無關緊要)之後,某些行(或所有行)在表A中將被刪除,所以,在插入新行之前,我需要檢查表A中最小的「數字」是什麼。我嘗試了這樣的方式:REPLACE INTO A(SELECT MIN(IFNULL(number,0)) + @號碼,ID從A) – kpns

回答

0

如果這確實是一些聚合函數,然後沿着這些路線的東西總是會返回1行

select MIN(IFNULL(tablesum.mysum, 0)) 
from 
    (select MIN(t.score) mysum from table t  
    union all 
    select @number as mysum 
) tablesum 

閱讀您的評論我想你想 表(0或1行)的選擇分鐘,結合這用一行固定數然後總和那些1或2行:

select SUM(IFNULL(d.number, 0)) 
from 
    (select MIN(t.number) number from table t  
    union all 
    select @number as number 
) d 
+0

謝謝:)對不起,也許沒有正確解釋它:) – kpns

1

你不能 - 你從空表中選擇。返回的行數與表選擇中的行數直接相關。

如果你期望在一個單行在任何時候,你可以做這樣的事情:

select IFNULL((select number from A limit 1), 0) + @number 

但是,我不得不問的究竟是什麼你想的更廣泛的問題用這個查詢來實現,因爲它可能會以更好的方式完成。

相關問題