Обновление таблицы БД на основе 2 отдельных условий - PullRequest
0 голосов
/ 29 июля 2010

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

Однако условие 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)

Как видно из данных, ключ уникален, оригинал и провид(которые на самом деле являются иностранными ключами) может повториться.Ради этого примера я добавил значения vid, как и должно быть.Vid в основном идентифицирует строку с одинаковыми значениями и provid.

Мой вопрос: - как выглядит sql для обновления этого параметра таблицы vid = sequence.nextval, где origid и Different (Provid)

1 Ответ

0 голосов
/ 30 июля 2010

Попробуйте:

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
...