基于2个单独的条件更新db表

时间:2010-07-29 12:46:58

标签: sql database db2 sql-update

我需要更新我的表(依赖项)并将新列(vid)设置为序列的nextval。我无法改变表中数据的方式,所以请不要提及删除冗余数据。

然而,where条件是问题,因为需要满足2个条件(cols provid和origid)。有一个单独的主键(prikey)。该表如下所示: -

Table dependency (
  varchar prikey(46),
  varchar provid(46),
  varchar origid(46)
  varchar otherdata(16)
  vid integer
)

示例数据如下所示: -

(prikey, ORIGID, PROVID, VID) 
('AA1', 'C3C87F000001', '23', 1), 
('AA2', 'C3C87F000001', '23', 1), 
('AA3', 'C3C87F000001', '26', 2), 
('AA4', 'C3C87F000001', '53', 3)
('AA5', 'A3C87F000009', '26', 4), 
('AA6', 'A3C87F000009', '23', 5)

从数据中可以看出,prikey是唯一的,origid和provid(实际上是外键)可能重复。为了这个例子,我已经添加了vid值。 vid基本上标识了具有相同原始提供的行。

我的问题: - 更新此表设置的sid是什么样的设置vid = sequence.nextval其中origid和distinct(provid)?

1 个答案:

答案 0 :(得分:0)

尝试:

merge into dependency
USING (SELECT DENSE_RANK() OVER (ORDER BY prikey, ORIGID, PROVID) g, prikey rid FROM dependency) SOURCE
ON (dependency.prikey = SOURCE.prikey)
WHEN MATCHED THEN UPDATE SET dependency.vid = SOURCE.g