別のテーブルからテーブルを更新する方法


28

1つのテーブルAには列(id、field_1、field_2)があり、別のテーブルBには列(id、field_2)があります

ここで、テーブルBをAにマージします。つまり、テーブルAのfield_2をテーブルBの値に更新することを意味します。ところで、私はオラクルを使用しています

ありがとう


両方のテーブルに同じ数のレコードが含まれていますか?
ujjwalesri

回答:


29

相互に関連する副照会(Kerriが推奨)の代替アプローチは、MERGEステートメントを使用することです。これ、副選択(両方のステートメントの実行プランを確認することによってのみ検証できます)よりも効率的です。

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2

2
MERGEステートメントの唯一の制限は、ステートメントが結合されている列を更新できないことです。つまり、ON句で使用されている列を更新できません。
ラリットクマールB

これは私のために働いて、250万行を更新しましたが、サブクエリメソッドを試行して、エラーが発生する前に45分間実行されましたORA-01555: snapshot too old
-helmy

15

あなたはこれについて何を望んでいるのか正確にはわかりませんが、これは1回限り、またはスケジュールされたジョブを介して連続して動作するはずです:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

これで、上記が実行されるたびに、テーブル内のすべての行で実行されます。これが常にあなたがしなければならないことであるならば、私は何か他のものを提案しますが、一回限りの、または非常に小さなテーブルではそれで十分なはずです。


2

私はuser2の別のテーブルからuser1の1つのテーブルを使用してこれを正常に行いました:

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.