更新許多行根據各等於(USER_ID)一列到一個表從另一個表基於一列。更新的行與另一個表中的各條件相同的
這兩個表都有一個user_id
列。當user_id
列相同時,需要將t2
中的數據插入t1
。
預先感謝您提供的任何幫助。
更新許多行根據各等於(USER_ID)一列到一個表從另一個表基於一列。更新的行與另一個表中的各條件相同的
這兩個表都有一個user_id
列。當user_id
列相同時,需要將t2
中的數據插入t1
。
預先感謝您提供的任何幫助。
update
table1 t1
set
(
t1.column1,
t1.column2
) = (
select
t2.column1,
t2.column2
from
table2 t2
where
t2.column1 = t1.column1
)
where exists (
select
null
from
table2 t2
where
t2.column1 = t1.column1
);
還是這個(如果t2.column1 < => t1.column1是多對一和他們中的任何一個是好的):
update
table1 t1
set
(
t1.column1,
t1.column2
) = (
select
t2.column1,
t2.column2
from
table2 t2
where
t2.column1 = t1.column1
and
rownum = 1
)
where exists (
select
null
from
table2 t2
where
t2.column1 = t1.column1
);
如果您想更新從T2與數據T1匹配的行,則:
update t1
set (c1, c2, c3) =
(select c1, c2, c3 from t2
where t2.user_id = t1.user_id)
where exists
(select * from t2
where t2.user_id = t1.user_id)
「在哪裏存在」部分,以防止更新T1列空在那裏不存在匹配。
如果記錄已經存在於t1中(user_id匹配),那麼這不是插入,除非您很樂意創建重複的user_id。
您可能想要更新嗎?
UPDATE t1
SET <t1.col_list> = (SELECT <t2.col_list>
FROM t2
WHERE t2.user_id = t1.user_id)
WHERE EXISTS
(SELECT 1
FROM t2
WHERE t1.user_id = t2.user_id);
希望它可以幫助...
merge into t2 t2
using (select * from t1) t1
on (t2.user_id = t1.user_id)
when matched then update
set
t2.c1 = t1.c1
, t2.c2 = t1.c2
您可以隨時使用並省略「未匹配部分」
merge into table1 FromTable
using table2 ToTable
on (FromTable.field1 = ToTable.field1
and FromTable.field2 =ToTable.field2)
when Matched then
update set
ToTable.fieldr = FromTable.fieldx,
ToTable.fields = FromTable.fieldy,
ToTable.fieldt = FromTable.fieldz)
when not matched then
insert (ToTable.field1,
ToTable.field2,
ToTable.fieldr,
ToTable.fields,
ToTable.fieldt)
values (FromTable.field1,
FromTable.field2,
FromTable.fieldx,
FromTable.fieldy,
FromTable.fieldz);
Upvoted。請參閱相關問題:http://stackoverflow.com/q/7030699/435605 –