UPDATE中的SELECT给出错误

时间:2017-04-06 13:21:37

标签: oracle

我在此声明中收到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字段,选择返回。

2 个答案:

答案 0 :(得分:0)

试试这个

UPDATE und u
SET    client_params   = 'test'
WHERE  EXISTS
      (SELECT 1
       FROM   cells c 
       WHERE  C.SASE = 1
       AND    c.und_id = u.id)

答案 1 :(得分:0)

通过标识列更新一个表中直接与另一个表中的行对应的行的最简单(尽管可能不是最有效)的方法是使用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)