在其他表中使用selfreference更新列

时间:2018-01-18 02:49:44

标签: sql oracle

我在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,但这些表没有类似的东西。这是一项非常简单的任务,我已经花了几个小时试图解决它。我开始变得非常绝望。

2 个答案:

答案 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);

DEMO