我有 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 都是唯一标识符,仅在数据库中使用一次。任何帮助将不胜感激!
谢谢
答案 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
请注意,您不能在要更新的表上使用别名。