0

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

我知道这很长的路要走:

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

这个解决方案的坏处是,如果我有一个非常长且复杂的选择,那么我需要写两次......

例如:

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:里面的select可以缩短第二个select

4

3 回答 3

4
select coalesce(val1, val2) from test_table
于 2013-08-07T14:14:02.043 回答
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...

于 2013-08-07T14:14:34.817 回答
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
于 2013-08-07T14:14:05.147 回答