如果原始属性为NULL,则选择另一个属性(条件选择)

时间:2013-08-07 14:12:27

标签: sql select null oracle10g

如果我想仅选择属性,并且仅在另一个属性为NULL时,我该如何实现。

我知道很长的路要走:

select val1 from test_table where val1 is not null
OR
select val2 from test_table where val1 is null

这个解决方案很糟糕,如果我有一个非常长而复杂的选择,那么我需要写两次...

EG:

select val1 from test_table where condition1 AND condition2 AND condition3 AND val1 is not null
OR
select val2 from test_table where condition1 AND condition2 AND condition3 AND val1 is null

所以我希望,也许有一个较短的形式。无论如何,这就像编程语言中的IF或CASE(我认为)。

任何想法都赞赏。 第一个ide:内部选择可以缩短第二个选择

3 个答案:

答案 0 :(得分:4)

select coalesce(val1, val2) from test_table

答案 1 :(得分:2)

SELECT ISNULL(val1,val2)
FROM test_table

或者

SELECT COALESCE(val1,val2)
FROM test_table

我更喜欢后者,因为你可以有多个值,如:

SELECT COALESCE(val1,val2,val3,val4,....,valn)
FROM test_table

这意味着如果val1为null,则取val2,如果为null,则取val3等,直到达到valn ...

答案 2 :(得分:1)

您应该使用case表达式,如下所示

select 
  case 
    when condition1 is not null AND condition2 is not null AND condition3 is not null AND val1 is not null then val1
    when condition1 is null     AND condition2 is null     AND condition3 is null     AND val1 is null     then val2
    else null
  end
from test_table