更新Oracle中的模式

时间:2016-02-29 20:26:12

标签: sql oracle11g

我想用其他架构的数据更新表。为什么这不起作用?

UPDATE table a
SET a.value = b.value
FROM other_schema.table b
WHERE a.id = b.id AND b.value IS NOT NULL;

我已尝试使用id加入,但语法错误相同。

1 个答案:

答案 0 :(得分:2)

Oracle不支持FROM语句中的UPDATE子句。你想要像

这样的东西
UPDATE table a
   SET a.value = (SELECT b.value
                    FROM other_schema.table b
                   WHERE a.id = b.id 
                     AND b.value IS NOT NULL)
 WHERE EXISTS(SELECT b.value
                FROM other_schema.table b
               WHERE a.id = b.id 
                 AND b.value IS NOT NULL)

如果您想更新EXISTS中的每一行,a可以省略b,但我认为这不是您的目标。

如果您的联接产生了密钥保留的结果,您也可以

UPDATE( SELECT a.id, a.value a_value, b.value b_value
          FROM table a
               JOIN other_schema.table b
                 ON a.id = b.id AND
                    b.value IS NOT NULL )
   SET a_value = b_value;