2017-05-10 43 views
0

如果一个值value_two不存在(或nulltable_two我想要默认值value_twotable_one从存在价值的表中选择?

我有以下查询格式:

SELECT one.value_one, two.value_two 
    FROM schema.table_one one 
    LEFT JOIN schema.table_two two 
     ON one.id_value = two.id_value and two.other_column = 'other_val' 
    WHERE one.id_value = 'id_val'; 

我知道有一个选项是选择价值所有和返回后处理它在客户端执行以下操作:

SELECT one.value_one, one.value_two, two.value_two as two_value_two 
    FROM schema.table_one one 
    LEFT JOIN schema.table_two two 
     ON one.id_value = two.id_value and two.other_column = 'other_val' 
    WHERE one.id_value = 'id_val'; 

是否有'干净'的方式检查two.value_two是否存在,如果不存在则默认选择one.value_two

回答

2

可以使用COALESCE功能。

COALESCE返回非空的第一个参数。

使用方法如下:

SELECT COALESCE(two.value_two, one.value_two) 
FROM schema.table_one one 
LEFT JOIN schema.table_two two ON one.id_value = two.id_value and two.other_column = 'other_val' 
WHERE one.id_value = 'id_val'; 

注意COALESCE是ANSI SQL的功能,因此在SQL的所有实现可用的(MySQL和MS SQL Server中,...)