2010-07-29 3 views
0

Мне нужно обновить таблицу (зависимость) и установить новый столбец (vid) в nextval последовательности. Я не могу изменить способ ввода данных в таблицу, поэтому не упоминайте удаление избыточных данных.Обновление таблицы db на основе двух отдельных условий

Тем не менее, условие условия является проблемой, так как необходимо выполнить 2 условия (cols prov и 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 в основном идентифицирует строку, которая имеет тот же исходный код и.

Мой вопрос: - что такое sql, как для обновления этой настройки таблицы vid = sequence.nextval, где исходный и отдельный (Provise)?

+0

Это должно помочь вам начать работу: http://stackoverflow.com/questions/3297102/auto-generating-column-value-with-respect-to-another-column/3297154 # 3297154 – Tobiasopdenbrouw

ответ

0

Try:

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