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)。