2017-04-14 143 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