我有一个数据库,其中应该只有一个寄存器,其中包含 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; ano; valor_estimado, valor_realizado_oficial, indicador_fk, municipio_fk, und_federativa_fk
313885; "talend";2013;;888;2;2202;
291998;"suagenda";2013;900;;2;2202;
我想要第二个值:
291998;"suagenda";2013;900;888;2;2202;
我做错了什么?谢谢。
最佳答案
在示例数据中,有空列。比如最后一个:und_federativa_fk
.
其中一些列用于相关更新中的加入条件。如果这些空值转换为 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...
关于sql - 插入而不是更新导致重复行。怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25417459/