Попытка сделать простое обновление, но SQL Ошибка: ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь сделать простое обновление, используя две таблицы, но я получил эту ошибку: SQL Ошибка: ORA-01779: невозможно изменить столбец, который сопоставляется с таблицей без сохранения ключа. Я нашел много решений для этого я попробовал их, но это все еще не работает ... Не могли бы вы помочь мне решить эту проблему?

update (SELECT t1.STATUS from table1 t1 inner join table2 t2 on(t1.ID = t2.ID) 
where t1.STATUS like 'COMPLETE' and t2.PARTY is null) vp set vp.STATUS= 'NEW';

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Вы можете использовать update, но с коррелированным подзапросом:

update table1 t1
    set status = 'NEW'
    where t1.status = 'COMPLETE' and
          exists (select 1
                  from table2 t2 
                  where t1.ID = t2.ID and t2.party is null
                 );

Я подозреваю, что вы также можете захотеть условие, если в table2 вообще нет строк, но это лог c не будет соответствовать вашему текущему запросу.

0 голосов
/ 06 марта 2020

Вы можете сделать это, используя оператор слияния:

MERGE INTO table1 tgt
  USING (SELECT id
         FROM   table2
         WHERE  party IS NULL) src
    ON (tgt.id = src.id) -- ensure this join condition means there's only one source row per target row
WHEN MATCHED THEN
  UPDATE tgt.status = 'NEW'
  WHERE  tgt.status = 'COMPLETE';
...