我有一个 select 语句,我想让它像这样变成有条件的:
IFNULL(field_a, field_a, field_b)
如此一来,它会检查字段a。如果a为空,则选择的将是字段b。
这是否可能?
使用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+上都得到支持...
IF()
更易读。链接:https://dev59.com/EnA75IYBdhLWcg3wlqIT#23395407。 - rinogo另一种处理这个问题的方式(灵活适用于非空比较)...
select if(field_a is not null, field_a, field_b) from...
Select if(name is not null, CONCAT('name is : ',name),'');
。 - Apoloselect IFNULL(column, 'default')
也可以。请参见此处:http://sqlfiddle.com/#!9/14b752/1/0 - ArdaMySQL 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 |
+------------+-----------+----------+-----------