[ORACLE 10g] Mehrere Felder in Zieltabelle Updaten

DaBuddy

Grünschnabel
Hallo zusammen,

ich habe eine Zieltabelle (welager) und eine Basistabelle (psm).
In der Zieltabelle möchte ich zwei Werte aus der Basistabelle updaten, wenn die artnummer übereinstimmt.
Mit dem folgenden Statenment funktioniert das ohne Problem:

SQL:
UPDATE 
(SELECT z.artnummer as OLD, q.artnummer_neu as NEW
FROM welager z
INNER JOIN psm q
ON z.artnummer = q.artnummer_alt
and z.mandant not like '3'
--and z.mandant = q.mandant
--WHERE z.artnummer ='MS-ST 02'
) 
SET OLD = NEW;

Jetzt kam die Anforderung auch das Feld artbez zu updaten und ich stehe eben dermaßen auf dem Schlauch :(

Beide Tabellen sind wie folgt aufgebaut:

welager
| artnummer (Primary Key) | artzbez | mandant | ... |

psm
| artnummer_alt (Primary Key) | artnummer_neu| artzbez |

Könnt ihr mir dabei helfen? :)

Grüße
Bastian
 
Zuletzt bearbeitet von einem Moderator:
Hi Sheel,

es scheitert daran, dass ich mir nicht sicher bin, wie ich das Statement sinnig erweitern soll.

So sieht meine Idee aus:

SQL:
UPDATE 
(SELECT z.artnummer, q.artnummer_neu, z.artbez, q.artbez_neu
FROM welager z
INNER JOIN psm
ON z.artnummer = q.artnummer_alt
--and z.mandant not like '3'
--and z.mandant = q.mandant
WHERE z.artnummer ='110333A17'
) 
SET z.artnummer = q.artnummer_neu,
z.artbez = q.artbez_neu;

Beim ausführen erscheint dann folgende Fehlermeldung:

Fehler beim Start in Zeile 8 in Befehl:
UPDATE
(SELECT z.artnummer, q.artnummer_neu, z.artbez, q.artbez_neu
FROM welager z
INNER JOIN psm
ON z.artnummer = q.artnummer_alt


WHERE z.artnummer ='110333A17'
)
SET z.artnummer = q.artnummer_neu,
z.artbez = q.artbez_neu
Fehler bei Befehlszeile:12 Spalte:17
Fehlerbericht:
SQL-Fehler: ORA-00904: "Q"."ARTNUMMER_ALT": ungültiger Bezeichner
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Q.ARTNUMMER_ALT gibt es aber...

Grüße
Bastian
 
Zuletzt bearbeitet von einem Moderator:
Hab jetzt die Lösung gefunden oder her mein Problem. Die Artikelnummer aus der Where-Klausel gab es nicht :eek:

Das fertige Statement sieht nun so aus:

SQL:
UPDATE 
(SELECT z.artnummer as OLD1, q.artnummer_neu as NEW1, z.artbez as OLD2, q.artbez_neu as NEW2
FROM welager z
INNER JOIN psm q
ON z.artnummer = q.artnummer_alt
--and z.mandant not like '3'
--and z.mandant = q.mandant
--WHERE z.artnummer ='110333A17'
) 
SET OLD1 = NEW1, OLD2 = NEW2;

Trotzdem danke, Sheel :)

Grüße
Bastian
 
Zuletzt bearbeitet von einem Moderator:
Zurück