2016-06-09 94 views
3

有沒有辦法爲所有返回值爲null的值(特別是在MySql中)設置默認值?SELECT *語句上的SQL IFNULL

而不是

SELECT 
    IFNULL(foo, 0), 
    IFNULL(bar, 0), 
    IFNULL(baz, 0) 
FROM table 

我想這樣做:

SELECT IFNULL(*, 0) 
FROM table 

// this does not work, but I'm looking for something like it 
+2

無,在SQL中沒有辦法做到這一點。 –

+0

感謝您的反饋意見,並且對於發佈此帖的任何人,我無法在每個項目上放置IFNULL的原因是由於我以ORM樣式動態生成SQL,所以我不知道數字或者返回那些列的數據類型,但是我然後對另一個表(例如一個表格)執行LEFT JOIN,並在動態表中執行select *。 – sabrams

回答

2

在SQL函數的結果是一個單一值(列),而不是列的列表。所以沒有,也不可能有這樣的結構。不幸的是,你必須單獨處理每一列。

+1

不是我希望的答案,但肯定很好地知道。 – sabrams

0

你可以添加默認值表中,如果你不在乎保留NULL

ALTER TABLE yourTable ALTER foo SET DEFAULT 0; 

您還可以創建一個視圖,你寫出來的每一個IFNULL()語句一次,只是用它來除了一直重新輸入之外。

但正如其他人指出的那樣,沒有任何構造可以完全按照你的希望去做。

你也可以很快的做重複的事情像這樣用表的元數據:

SELECT CONCAT("IFNULL(",`COLUMN_NAME`,",0)") 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename'; 
+0

不幸的是,我的選擇中的許多值都是計算值,並且有一些表格在表格中我想要空值,但不在正在生成的報告中。 – sabrams

-1

你可以試試case語句的SQL如下

select 
CASE 
    WHEN foo is null THEN 0 else foo end 

    from urtable 

,然後同其他的列