sql合并重复记录

ezykj2lf  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(1508)

我正在尝试合并DB2SQL中的两个表,它不断向我提供sql状态21506和错误消息sql0788。
到目前为止,我的情况是:

  1. merge into table1 as tgt
  2. using table2 as src
  3. on src.key1 = tgt.key1 and src.key2 = tgt.key2
  4. when matched then
  5. update set
  6. (fld1, fld2, fld3) = (src.fld1, src.fld2, src.fld3)
  7. when not matched then
  8. insert (fld1, fld2, fld3) values (src.fld1, src.fld2, src.fld3)

我搜索了这样的复制品:

  1. select src.key1, src.key2, count(*)
  2. from table1 as tgt
  3. inner join table2 as src on tgt.key1 = src.key1 and tgt.key2 = src.key2
  4. group by src.key1, src.key2
  5. having count(*) > 1

没有(重复)记录返回。我错过了什么?

ddhy6vgd

ddhy6vgd1#

sqlstate 21506意味着
为merge语句的update、delete或insert操作多次标识了目标表的同一行。
所以在src中有两行有相同的键。。。
你不能用这句话找到他们

  1. select src.key1, src.key2, count(*)
  2. from table1 as tgt
  3. inner join table2 as src on tgt.key1 = src.key1 and tgt.key2 = src.key2
  4. group by src.key1, src.key2
  5. having count(*) > 1

因为内部连接,这意味着表2中的重复行在表1中没有匹配项。
这应该给你看。。

  1. select src.key1, src.key2, count(*)
  2. from table2 as src
  3. group by src.key1, src.key2
  4. having count(*) > 1
展开查看全部
sshcrbum

sshcrbum2#

所以问题出在 update .
而不是:

  1. update set
  2. (fld1, fld2, fld3) = (src.fld1, src.fld2, src.fld3)

这样做:

  1. update set
  2. fld1 = src.fld1,
  3. fld2 = src.fld2,
  4. fld3 = src.fld3

在没有改变其他任何东西的情况下,这起作用了,为什么?还是不知道。。。

相关问题