Я получаю SQL Error: ORA-01779: cannot modify a column which maps to a non key-preserved table ошибку в этом утверждении:

UPDATE 
(
SELECT CELLS.NUM, UND.CLIENT_PARAMS
FROM CELLS 
LEFT OUTER JOIN UND 
ON CELLS.UND_ID = UND.ID
WHERE CELLS.SASE = 1
) t
SET t.CLIENT_PARAMS = 'test';

Я хотел бы обновить поле CLIENT_PARAMS для всех строк, которые выбирает возврат.

0
Pablo 6 Апр 2017 в 16:21

2 ответа

Лучший ответ

Самый простой (хотя, возможно, и не самый эффективный) способ обновления строк в одной таблице, которые непосредственно соответствуют строкам в другой таблице через столбец идентификаторов, заключается в использовании WHERE table1.column IN (SELECT id FROM table2 WHERE ...).

В этом случае:

UPDATE UND
SET    client_params = 'test'
WHERE  id IN
   (SELECT und_id
    FROM   CELLS
    WHERE  SASE=1)
0
Quietust 6 Апр 2017 в 14:13

Попробуй это

UPDATE und u
SET    client_params   = 'test'
WHERE  EXISTS
      (SELECT 1
       FROM   cells c 
       WHERE  C.SASE = 1
       AND    c.und_id = u.id)
0
BriteSponge 6 Апр 2017 в 13:38