在为部分结果返回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?
答案 0 :(得分:3)
使用如下所示的COALESCE()
函数,它将返回列表
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')