2016-06-09 131 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 

,然后同其他的列