2017-04-14 26 views
0

rownumを使用して関連のないテーブルから値を持つ列を更新するには、oracle sqlを記述する必要があります。rownumに基づくOracleの更新

私はそれが仕事を得ることはできません。

UPDATE table_1 A 
SET A.id = (SELECT B.id FROM table_2 B 
     WHERE A.rownum = B.rownum) 

感謝を。

カラムIDから別のテーブルに値を挿入するだけで済みます。私は結合のために使うことができる列はありません。 これは可能ですか?

+3

編集ご質問や、サンプルデータと望ましい結果を提供します。 'rownum'は擬似列であり、実際の列ではないので、あなたが考えるべきであると思われる振る舞いをしません。 –

+1

なぜデータを関連付ける方法が他にありませんか?それはリレーショナルデータベースを採用する良い方法ではないようです... – SandPiper

+0

私はSandPiperに同意します。リレーショナルデータベースの行は**ソートされていません**。 「ランダム」値に基づいて2つのテーブルを結合することは意味をなさない。 –

答えて

1

UPDATEの代わりにMERGEステートメントを使用します。
下記の簡単な例をご覧ください。最初


テストデータ(table_2id列がnull):

create table table_2 as 
SELECT LEVEL as id, chr(64+level) as name 
from dual connect by level <= 5; 

create table table_1 as select * from table_2; 
update table_2 set id = null; 
commit; 

SELECT * FROM table_1; 
     ID NAME 
---------- ---- 
     1 A 
     2 B 
     3 C 
     4 D 
     5 E 



SELECT * FROM table_2; 
     ID NAME 
---------- ---- 
      A 
      B 
      C 
      D 
      E 

これは、それらのrownumnsに基づか二番目の1つのテーブルからid値を複写コマンドをMERGEあります

MERGE INTO table_2 t2 
USING (
     SELECT * 
     FROM (
       select t.*, rownum as rn 
       from table_1 t 
     ) t1 
     JOIN (
       select rownum as rn, rowid as rid 
       from table_2 t 
     ) t2 
     ON t1.rn = t2.rn 
) d 
ON (t2.rowid = d.rid) 
WHEN MATCHED THEN UPDATE SET t2.id = d.id; 

そして、マージ後の結果は次のとおりです。

SELECT * FROM table_2; 
     ID NAME 
---------- ---- 
     1 A 
     2 B 
     3 C 
     4 D 
     5 E 
+0

ありがとうございました。できます。 – Steve

関連する問題