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