在Oracle中可以选择数据集并像Merge语句中那样使用它进行更新。Oracle在更新之前选择
我正在寻找类似
USING
(
SELECT a, b, c FROM t
)
UPDATE t1
SET t1.x = t.a,
t1.y = t.b;
在Oracle中可以选择数据集并像Merge语句中那样使用它进行更新。Oracle在更新之前选择
我正在寻找类似
USING
(
SELECT a, b, c FROM t
)
UPDATE t1
SET t1.x = t.a,
t1.y = t.b;
这听起来像你只是想
UPDATE t1
SET (x, y) = (SELECT a, b
FROM t
WHERE t.some_column = t1.some_column);
如果你只是想,如果有一个匹配的行T中
更新T1行UPDATE t1
SET (x, y) = (SELECT a, b
FROM t
WHERE t.some_column = t1.some_column)
WHERE EXISTS (
SELECT 1
FROM t
WHERE t.some_column = t1.some_column);
如果您的SELECT从T
返回单行,则可以省略WHERE子句加入这两个表。
这应该解决我的问题,但我担心的表现。这是一个与合并语句中的select子句不同的相关子查询。如果我错了,请纠正我的错误 – Avinash
@Avinash - 执行只有更新的MERGE(不管这是否合法语法取决于Oracle版本)应该不会更有效,而不是执行相关更新。 –
要像“在合并语句中”那样进行更新,为什么不使用合并语句? 'when matched'和'when not matched'子句都是可选的。要在没有插入的情况下进行更新,只需使用'when matched'子句。 –