Anmelden

View Full Version : Noch einmal: Update einer Tabelle mit Wert aus einer anderen



Hubert
17-10-18, 14:30
Hallo zusammen,

in dem Thread http://http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/10599-SQL-Update-aus-zwei-Dateien-mit-3-Schl%C3%BCsselfeldern (http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/10599-SQL-Update-aus-zwei-Dateien-mit-3-Schl%C3%BCsselfeldern) wurde das Thema ja ausführlich von Baldur und Brigitta behandelt. Ich bekomme aber immer Fehlermeldungen.


UPDATE fmbasis2 a
SET a.bsartnr

= (select distinct b.fmart
from erp/artikel_l3 b
where a.baba = b.dsba
and a.bsgte = b.dsgte
and a.bspf = b.dspr
and a.bsbrt = b.dsfbr1
and a.bsdck = b.dsfstk
and b.laenge = 3200
and b.status1 = 'Lagerartikel'
)
where exists (
select c.baba,
c.bsgte,
c.bspf ,
c.bsbrt,
c.bsdck
from fmbasis2 c
where a.baba = c.baba
and a.bsgte = c.bsgte
and a.bspf = c.bspf
and a.bsbrt = c.bsbrt
and a.bsdck = c.bsdck )

bringt mir die Meldung "Nullwerte für Spalte oder Variable BSARTNR nicht zulässig.".
Wenn ich die Tabelle erp/artikel_l3 mit den Bedingungen
b.laenge = 3200
and b.status1 = 'Lagerartikel'
abfrage, bekomme ich keine NULL Sätze. Hat jemand eine Idee, woran das liegen kann?

Herzlichen Dank im Voraus

Hubert

Fuerchau
17-10-18, 14:42
Die beiden Where-Klauseln korrespondieren nicht zu einander.
In erp/artikel_l3 ist die gewünschte Information nicht vorhanden, die in fmbasis2 aber gefunden wird.
Hier solltest du zusätzlich abfragen

where exists ...
and exists (select * from erp/artikel_l3 ...)

Den Subselect kannst du noch beschleunigen:
select b.fmart
from erp/artikel_l3 b
where a.baba = b.dsba
and a.bsgte = b.dsgte
and a.bspf = b.dspr
and a.bsbrt = b.dsfbr1
and a.bsdck = b.dsfstk
and b.laenge = 3200
and b.status1 = 'Lagerartikel'
fetch first 1 rows only

Hubert
17-10-18, 14:55
Danke für die schnelle Antwort, hat geklappt.

Hubert