where 條件中的字段有NULL值時的sql語句寫法問題

1.使用merge 更新表字段時,如果on條件中存在爲null的字段,那麼更新不成功

    merge into g_xx a
     using (select distinct CIG_CODE as code,CIG_FILTERLENGTH as filter_length,CIG_GIRTH as circle_length
    from STMA_xx
      )as b
     on (
         or (a.code=b.code and a.filltertype<>b.filltertype)
         or (a.code=b.code and a.circle_length<>b.circle_length)

 雖然存在(a.code=b.code and a.circle_length<>b.circle_length)滿足這個條件的值,但是merge 條數爲0 ,由於g_xx表中circle_length中存在值爲null的情況,所以merge的時候就是更新不成功,

    merge into g_xx a
     using (select distinct CIG_CODE as code,CIG_FILTERLENGTH as filter_length,CIG_GIRTH as circle_length
    from STMA_xx
      )as b
     on (
         or (a.code=b.code and COALESCE(a.filltertype<>b.filltertype,0))
         or (a.code=b.code and COALESCE(a.circle_length,0)<>COALESCE(b.circle_length,0)) 

將字段做了COALESCE的轉換,就能夠正常更新了 

2.coalesce函數返回參數(列名)中第一個非NULL的字段值,注意不是爲空'' 

coalesce()解釋:返回參數中的第一個非空表達式(從左向右依次類推); 

使用示例:a,b,c三個變量。

select coalesce(null,2,3); // Return 2

select coalesce(null,null,3); // Return 3

select coalesce(1,2,3); // Return 1
通過上面例子可以看出,他的作用是將返回傳入的參數中第一個非null的值,再比如 

SELECT COALESCE(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1); 
-- Return 1 
如果傳入的參數所有都是null,則返回null,比如 
SELECT COALESCE(NULL, NULL, NULL, NULL); 
-- Return NULL 

這個參數使用的場合爲:假如某個字段默認是null,你想其返回的不是null,而是比如0或其他值,可以使用這個函數 

SELECT COALESCE(字段名,0) as value from t)。 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章