Oracle9i: Update-Befehl mit 2 Tabellen

Hallo:

Ist es möglich, mit einem Update-Befehl
Spaltenwerte einer Tabelle in eine andere zu schreiben?

Beispiel:

Ich habe 2 Tabellen tab_a und tab_b

TAB_A:
a_id
a_feld2
a_feld3

TAB_B:
b_id
b_a_id (hat eine referenz auf tab_a)
b_feld3

In tab_a ist das feld a_feld3 leer und ich will dieses Feld mit den Werten des Feldes b_feld3 von tab_b füllen (mit der Bedingung, dass a_id=b_a_id)

Ich wollte es versuchen mit

update tab_a a, tab_b b
set a.a_feld3 = b.b_feld3
where a.a_id=b.b_a_id

allerdings akzeptiert er dies nicht.

Kann man dies überhaupt über einen einzigen Update lösen oder muss ich eine Prozedur dafür schreiben?

Gruss
Regine

Hallo:

Ist es möglich, mit einem Update-Befehl
Spaltenwerte einer Tabelle in eine andere zu schreiben?

Beispiel:

Ich habe 2 Tabellen tab_a und tab_b

TAB_A:
a_id
a_feld2
a_feld3

TAB_B:
b_id
b_a_id (hat eine referenz auf tab_a)
b_feld3

In tab_a ist das feld a_feld3 leer und ich will dieses Feld
mit den Werten des Feldes b_feld3 von tab_b füllen (mit der
Bedingung, dass a_id=b_a_id)

Ich wollte es versuchen mit

update tab_a a, tab_b b
set a.a_feld3 = b.b_feld3
where a.a_id=b.b_a_id

update tab_a a
set a_feld3 = (SELECT b_beld3 FROM tab_b WHERE b_a_id = a.a_id)

Funktioniert immer dann, wenn aus dem SELECT genau ein Wert zurückkommt.

Gruß

Peter

allerdings akzeptiert er dies nicht.

Kann man dies überhaupt über einen einzigen Update lösen oder
muss ich eine Prozedur dafür schreiben?

Gruss
Regine

Leider habe ich nicht nur einen Wert sondern für jeden Datensatz einen verschiedenen.
tab_a ist eine Tabelle mit Personen, tab_b auch (enthält nur mehr Personen und mehr Felder) und ich will einige Informationen der tabelle tab_b zu der entsprechenden Person in tab_a schreiben.

Gruss
Regine

update tab_a a
set a_feld3 = (SELECT b_beld3 FROM tab_b WHERE b_a_id =
a.a_id)

Funktioniert immer dann, wenn aus dem SELECT genau ein Wert
zurückkommt.

Gruß

Peter

Leider habe ich nicht nur einen Wert sondern für jeden
Datensatz einen verschiedenen.
tab_a ist eine Tabelle mit Personen, tab_b auch (enthält nur
mehr Personen und mehr Felder) und ich will einige
Informationen der tabelle tab_b zu der entsprechenden Person
in tab_a schreiben.

Gruss
Regine

Hallo Regine, aber das macht doch gar nichts. Evtl. kann es sein, wenn tab_b weniger IDs enthält, dass Du die NULL-Werte abfangen musst bzw eine Einschränkung brauchst:
update tab_a a
set a_feld3 = (SELECT b_beld3 FROM tab_b WHERE b_a_id = a.a_id)
where a.a_id in (select b_a_id from tab_b)

Gruß

Peter

update tab_a a
set a_feld3 = (SELECT b_beld3 FROM tab_b WHERE b_a_id =
a.a_id)

Funktioniert immer dann, wenn aus dem SELECT genau ein Wert
zurückkommt.

Gruß

Peter

Hallo,

alternativ zu Peters SQL gehtauch folgendes:

update (select a.feld3 af3, b.feld3 bf3 from tab_a a, tab_b b where a.a_id = b.b_a_id)
set af3 = bf3;

DU machst damit praktisch ein update auf die Query in der Klammer.
Funktioniert ebenfalls nur, wenn Eindeutigkeit herrscht. Also wenn jedem a.a_id genau ein oder kein b.b_a_id zugeordnet ist.

Gruß, Niels

Hi!

alternativ zu Peters SQL gehtauch folgendes:

update (select a.feld3 af3, b.feld3 bf3 from tab_a a, tab_b b
where a.a_id = b.b_a_id)
set af3 = bf3;

Damit nimmst Du mir die View vorraus, die ich hier jetzt posten wollte :wink:

Grüße,
Tomh