2013-08-07 151 views
0

如何才能實現如果我想只選擇屬性,並且只有其他屬性爲NULL時才能實現。如果原始屬性爲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:內選擇能夠縮短第二選擇

+1

什麼數據庫系統?不同的系統爲此使用不同的函數名稱:isnull vs如果vs coalesce vs ifnull等 –

+0

Oracle 10g,但如果解決方案是通用的,那將會很好。謝謝! – czupe

回答

4
select coalesce(val1, val2) from test_table 
+0

我可以在連接中使用類似的東西嗎?我的意思是select * from test_table1 t1內部連接test_table2 on coalesce(t1.name,t1.id)= t2.id – czupe

+0

是的。是的你可以。 –

+0

謝謝我已經試過了。接受你,再次感謝,感謝! – czupe

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 
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,則取值2,如果是空得再取VAL3等,直到它到達VALN ...