使用MERGE語句代替UPDATE。
請在下面找到一個簡單的例子。
測試數據的第一(在table_2
id
列爲空):
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
編輯你的問題,並提供樣本數據和預期的結果。 'rownum'是一個僞列,而不是一個真正的專欄,所以它的行爲不像你認爲的那樣。 –
爲什麼你沒有其他方式來關聯數據?這似乎不是使用關係數據庫的好方法... – SandPiper
我同意SandPiper。關係數據庫中的行不是**排序的。基於「隨機」值加入兩個表格沒有任何意義。 –