Update einer Spalte mit einer Spalte einer anderen Tabelle funktioniert nicht

Erika76

Neuer Benutzer
Beiträge
2
Hall0! Ich hätte eine Frage zu einem Update.

Und zwar habe ich zwei Tabellen.
BESTAND_A und BESTAND_B
Ich möchte nun in der Tabelle BESTAND_A die beiden Spalten MINDESTBESTAND und MAXBESTAND mit den Werten aus der Tabelle BESTAND_B überschreiben. Zum verbinden dient mir die Artikelnummer. (A.ARTIKEL, B.ARTIKEL)

meine Update dazu sieht so aus:

update BESTAND_A
set A.MINBESTAND = (select B.MINBESTAND from BESTAND_B
join BESTAND_A on B.ARTIKEL = A.ARTIKEL
);

Folgender Fehler kommt zurück:

Fehlerbericht -
SQL-Fehler: ORA-01427: Unterabfrage für eine Zeile liefert mehr als eine Zeile
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:

Führe ich nur ein Select aus, mit dem ich ermitteln möchte, wieviel Zeilen überhaupt geändert werden, läuft das und ergibt 113 Zeilen:

select count(B.MINBESTAND) from BESTAND_B
join BESTAND_A on B.ARTIKEL= A.ARTIKEL;

Ich wäre sehr dankbar, wenn mir jemand helfen könnte!
 
Werbung:
Code:
test=# select * from bestand_a;
 artikel | minbestand | maxbestand
---------+------------+------------
       1 |            |           
       2 |            |           
       3 |            |           
(3 rows)

test=*# select * from bestand_b;
 artikel | minbestand | maxbestand
---------+------------+------------
       1 |         10 |         20
       2 |         20 |         30
       3 |        200 |        300
(3 rows)
test=*# update bestand_a set minbestand = b.minbestand, maxbestand=b.maxbestand from bestand_b b where bestand_a.artikel=b.artikel;
UPDATE 3
test=*# select * from bestand_a;
 artikel | minbestand | maxbestand
---------+------------+------------
       1 |         10 |         20
       2 |         20 |         30
       3 |        200 |        300
(3 rows)
 
Oracle erlaubt keinen join (oder FROM) im UPDATE statement (deswegen ist akretschmers Antwort auch wenig hilfreich).

Für so etwas ist der MERGE Befehl gedacht:
Code:
merge into bestand_a a
using bestand_b b
on (a.artikel = b.artikel)
when matched then update
   set minbestand = b.minbestand,
       maxbestand = b.maxbestand;
 
Werbung:
Oracle erlaubt keinen join (oder FROM) im UPDATE statement (deswegen ist akretschmers Antwort auch wenig hilfreich).

Für so etwas ist der MERGE Befehl gedacht:
Code:
merge into bestand_a a
using bestand_b b
on (a.artikel = b.artikel)
when matched then update
   set minbestand = b.minbestand,
       maxbestand = b.maxbestand;

Habt vielen Dank! So geht es! Die 113 Zeilen wurden aktualisiert ….
 
Zurück
Oben