我在Oracle中必须做的工作非常原始。假设我有两张桌子。
T1
+--------+
| NUMBER |
+--------+
| 1 |
| 2 |
| 3 |
| 2 |
| 1 |
+--------+
T2
+------------+------------+
| OLD_NUMBER | NEW_NUMBER |
+------------+------------+
| 1 | 5 |
| 2 | 9 |
| 3 | 17 |
+------------+------------+
T1 after
+--------+
| NUMBER |
+--------+
| 5 |
| 9 |
| 17 |
| 9 |
| 5 |
+--------+
我想用T2中的相应数字更新T1。 T1确实有重复,但T2中的两列都是唯一的。怎么我能更新T1?我尝试了多个更新,更新与存在clausule,我尝试合并,我尝试选择更新,没有任何作用。关于多列或密钥保留表,我仍然会收到一些错误。我发现的每个更新都使用其他一些列来加入ID,但这些表没有类似的东西。这是一项非常简单的任务,我已经花了几个小时试图解决它。我开始变得非常绝望。
答案 0 :(得分:0)
我认为这可以满足您的需求:
update t1
set number = (select t2.new_number from t2 where t2.old_number = t1.number)
where exists (select 1 from t2 where t2.old_number = t1.number);
答案 1 :(得分:0)
您可以使用此UPDATE
。
UPDATE T1 i
SET NUMBER_T =
(SELECT MAX (NEW_NUMBER)
FROM T1 JOIN T2 ON T1.NUMBER_T = T2.OLD_NUMBER
WHERE T2.OLD_NUMBER = i.NUMBER_T);