2017-04-14 154 views
0

我需要編寫oracle sql以使用rownum從無關表更新具有值的列。基於rownum的Oracle更新

我無法得到它的工作:

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

感謝。

只需要從列ID插入值到另一個表。沒有列我可以用於加入但是rownum。 這是可能的嗎?

+3

編輯你的問題,並提供樣本數據和預期的結果。 'rownum'是一個僞列,而不是一個真正的專欄,所以它的行爲不像你認爲的那樣。 –

+1

爲什麼你沒有其他方式來關聯數據?這似乎不是使用關係數據庫的好方法... – SandPiper

+0

我同意SandPiper。關係數據庫中的行不是**排序的。基於「隨機」值加入兩個表格沒有任何意義。 –

回答

1

使用MERGE語句代替UPDATE。
請在下面找到一個簡單的例子。


測試數據的第一(在table_2id列爲空):

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 

這是MERGE該複印機id值從一個表到第二個基礎上他們的rownumns命令:

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