Aktualisieren Sie viele Zeilen in einer Tabelle aus einer anderen Tabelle, wenn eine Spalte in beiden gleich ist (user_id).
Beide Tabellen haben eine Spalte "user_id". Sie müssen Daten aus "t2" in "t1" einfügen, wenn die Spalte "user_id" gleich ist.
Ich danke Ihnen im Voraus für jede angebotene Hilfe.
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
);
Oder so (wenn t2.column1 <=> t1.column1 viele bis eins sind und jeder von ihnen gut ist):
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
);
Wenn Sie übereinstimmende Zeilen in t1 mit Daten aus t2 aktualisieren wollen, dann:
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)
Der "where exists" Teil soll verhindern, dass die t1-Spalten auf Null aktualisiert werden, wenn keine Übereinstimmung besteht.
Es ist keine Einfügung, wenn der Datensatz bereits in t1 existiert (die user_id stimmt überein), es sei denn, Sie sind glücklich, doppelte user_id's zu erstellen.
Sie möchten vielleicht ein Update?
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);
Hoffe es hilft...