我有一个数据库,其中应该只有一个具有2个值列的寄存器,可以由我的Web应用程序填充。在excel中给我的一个列的值,我们不得不把它放到数据库中。这样做的人应该使用“如果存在其他插入更新”,但他没有。现在,我们有一些数据,重复的行,只有列“valor_realizado_oficial”填充(列adt_login填充'talend'并且键列也填充),另一行填充了应用程序填充的另一列。 所以: 如果存在两行,我想将“valor_realizado_oficial”列的值从adt_login(如'talend')行复制到另一行并删除该行。 如果只存在一行,则不执行任何操作。
我尝试用以下内容执行复制部分:
update indicador_val iv
set valor_realizado_oficial=carga.valor_realizado_oficial
from (
select valor_realizado_oficial, ano, municipio_fk, indicador_fk, und_federativa_fk
from indicador_val
where adt_login like 'talend' and ano=2013 ) carga
where iv.ano=2013 and iv.municipio_fk=carga.municipio_fk
and iv.indicador_fk=carga.indicador_fk and iv.ano=carga.ano
and iv.und_federativa_fk = carga.und_federativa_fk;
但受影响的0行。这是一对线的例子:
ID; adt_login;肛门; valor_estimado,valor_realizado_oficial,indicador_fk,municipio_fk,und_federativa_fk
313885; “拓蓝”; 2013 ;; 888; 2; 2202;
291998; “suagenda”; 2013; 900 ;; 2; 2202;
我想第二个,有价值观:
291998; “suagenda”; 2013; 900; 888; 2; 2202;
我做错了什么?感谢。
答案 0 :(得分:0)
在示例数据中,有空列。例如,最后一个:und_federativa_fk
。
其中一些列用于相关UPDATE中的连接条件。如果这些空值转换为SQL NULL值,您应该意识到NULL=NULL
作为条件将为NULL,这意味着在此上下文中为false
。
仅此一点就可以解释为什么没有行更新。
解决方案是使用IS NOT DISTINCT FROM
作为可能为null的值的比较运算符。
示例:
where iv.ano=2013 and iv.municipio_fk IS NOT DISTINCT FROM carga.municipio_fk
and iv.indicador_fk IS NOT DISTINCT FROM carga.indicador_fk
etc...