MySQL IFNULL ELSE

63

我有一个 select 语句,我想让它像这样变成有条件的:

IFNULL(field_a, field_a, field_b)

如此一来,它会检查字段a。如果a为空,则选择的将是字段b。

这是否可能?


也许您混淆了IFNULL和NULLIF。您需要使用IFNULL:“如果expr1不为NULL,则IFNULL()返回expr1;否则返回expr2。” - Zvezdochka
5个回答

110

使用COALESCE函数:

SELECT COALESCE(field_a, field_b)

COALESCE是一个符合ANSI标准的函数,它从指定的列列表中从左到右依次处理列,并返回第一个非null值。因此,在例子中,如果field_a是null,则会显示field_b的值。但是,如果没有从指定的列中找到非null值,则此函数将返回NULL。

它在MySQL(我曾在4.1上使用过它)、SQL Server(自v2000起)和Oracle 9i+上都得到支持...


5
我也支持使用COALESCE。 - Chuck Callebs
2
这个函数如此清晰易懂的说明...谢谢!已更新坏掉的链接。 - Andrew
这是一个很棒的对我不熟悉的函数的解释!然而,对于OP的问题,使用IF()更易读。链接:https://dev59.com/EnA75IYBdhLWcg3wlqIT#23395407。 - rinogo

87

另一种处理这个问题的方式(灵活适用于非空比较)...

select if(field_a is not null, field_a, field_b) from...

3
最佳答案。允许执行Select if(name is not null, CONCAT('name is : ',name),''); - Apolo
选择 select IFNULL(column, 'default') 也可以。请参见此处:http://sqlfiddle.com/#!9/14b752/1/0 - Arda

45

可以,但只有两个参数:

IFNULL(field_a,field_b)
如果field_a不为空,则返回它,否则返回field_b
参考:IFNULL

0

更多示例

MySQL IFNULL() 语法和示例

语法

IFNULL 函数的语法如下:

IFNULL(expression_1,expression_2);

示例

   SELECT 
     name, IFNULL(businessphone, homephone) phone
 FROM
     users;



       #The above query return this result from users table

   +------------+-----------+----------+-----------
   | id        | name           | phone          |
   +------------+-----------+----------+-----------
   | 5         | Tommy Hill     | (541) 754-3009 |
   | 6         | John Smith     | (541) 754-3110 | 
   | 10        | Mark Greenspan | (541) 754-3111 | 
   | 11        | Kelvin Row     | (541) 754-3111 |
   +------------+-----------+----------+-----------

0
问题已经修改,似乎有一些答案与当前问题不同步。让我们重新开始。
没有 IFNULL(test, NullCase, notNullCase),但是有一个带有 elseswitch 语句。在这个例子中,我使用左连接来查找是否存在一个block,所以也有同样的问题,因为我想要一个0或1。下面是我的解决方案。
选择
CASE
WHEN person.blocked为空时 THEN 0
ELSE 1
END AS isBlocked
from mytable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接