带连接的SQL更新

时间:2011-06-24 14:23:55

标签: sql oracle join sql-update

我有 table1.fieldToChange 当前从 table2.oldData 填充的数据...但是我想更新它并将其更改为 table2。 newData

以下是我用来尝试实现此目的的代码:

UPDATE table1
SET table1.fieldToChange =
  (SELECT table2.newData
  FROM table2
  WHERE table2.oldData = table1.newData
  ) ;

但是我收到了'ORA-01427'错误。

table2.newData table2.oldData 都是唯一标识符,仅在数据库中使用一次。任何帮助将不胜感激!

谢谢

4 个答案:

答案 0 :(得分:1)

ORA-01427表示您在子查询中返回多个值。修改您的查询以包含DISTINCT子句或其他一些机制来唯一标识子查询中的行。

UPDATE table1
SET table1.fieldToChange =
  (SELECT DISTINCT table2.newData
  FROM table2
  WHERE table2.oldData = table1.newData
  ) ;

答案 1 :(得分:1)

使用MERGE statement尝试:

MERGE INTO table1 tgt
USING (SELECT newData,oldData 
         FROM table2
        WHERE table2.oldData = table1.newData) src
ON (src.oldData = tgt.newData)
WHEN MATCHED THEN
  UPDATE SET tgt.fieldToChange = src.newData;

答案 2 :(得分:1)

你的意思不是吗?

UPDATE table1
SET fieldToChange =
  (SELECT table2.newData
  FROM table2
  WHERE table2.oldData = table1.fieldToChange     ---- and NOT table1.newData ?
  ) ;

答案 3 :(得分:0)

不确定这是否适用于Oracle,但在MS SQL中您可以这样做:

UPDATE table1
SET fieldToChange = table2.newData
FROM table2  
WHERE table2.oldData = fieldToChange

请注意,您不能在要更新的表上使用别名。