我需要更新我的表(依赖项)并将新列(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)?
答案 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