MySQL - 找到NULL时设置默认返回值的方法?

时间:2014-11-19 00:30:32

标签: mysql

在为部分结果返回NULL时,SQL中是否有办法设置默认返回值?

这是我的SQL:

 SELECT p.id, p.title, concat( u1.meta_value, ' ', u2.meta_value ) as fullname, concat( r.name, ', ', c.name ) as location 
 FROM modules_profiles p 
 LEFT JOIN moonlight_usermeta u1 ON p.user_id = u1.user_id AND u1.meta_key = 'first_name' 
 LEFT JOIN moonlight_usermeta u2 ON p.user_id = u2.user_id AND u2.meta_key = 'last_name' 
 LEFT JOIN modules_regions r ON r.id = p.region_id
 LEFT JOIN modules_countries c ON c.id = p.country_id
 WHERE p.certification IN ( 'certified' ) AND p.country_id IN ( 2 )
 ORDER BY p.user_id ASC

有时候给定的配置文件没有设置region_id;因此,即使我们有一个国家/地区的名称(c.name),也会为相应的user_id返回NULL。

在这种情况下,是否只能返回c.name?

3 个答案:

答案 0 :(得分:3)

使用如下所示的COALESCE()函数,它将返回列表

中提供的第一个非NULL值
COALESCE(col_name, 'default_value')

对于您的情况,请执行

COALESCE(region_id, c.name)

我想,你是专门谈论这个部分

concat( r.name, ', ', c.name ) as location

您也可以使用CASE表达式修改此内容

case when r.name is not null and c.name is not null 
then concat( r.name, ', ', c.name ) else c.name end as location

答案 1 :(得分:0)

您想使用MySQL的IFNULL(value, default)功能。

答案 2 :(得分:0)

Coalesce可以帮到你

COALESCE(region_id, 'default value')