View Full Version : SQL Update 2 Dateien
Wieder mal das leidige Thema: Ich möchte Daten aus Feldern der Datei 2 in Felder der Datei 1 updaten. Habe mich an die Syntax gehalten und bekomme jetzt Fehlenmeldungen, dass ein TOKEN falsch ist:
update mdv/fzs set (fszleasvar, fzsleasvnr, fzsleasend) = (select
vtyp, vnum, vende where fzskeyknd=mdv/lea.fzskeyknd)
Token FZSKEYKND ungültig. Gültige Token: , FROM INTO.
Der Cursor steht auf den farbig markierten Buchstaben. Was ist da falsch?
Hallo
hier ein Beispiel:
Wenn ich das richtig sehe fehlt das from auf die Datei
update asmtool/lprm01p A set LVAL=
( select lval from asmtoolold/lprm01p B
where a.lpgm = b.lpgm
and a.llnr = b.llnr
and a.lent = b.lent )
Gruss
Michael
Das war es noch nicht. Jetzt kommt die Meldung
Ergebnis der Anweisung enthält mehr als eine Zeile.
Syntax:
update mdv/fzs set (fzsleasvar, fzsleasvnr, fzsleasend) = (select
fzsleasvar, fzsleasvnr, fzsleasend
from mdv/lea where fzskeyknd=lea.fzskeyknd)
Irgendwas ist noch falsch. Übrigens Datei 1 ist natürlich viel größer als Datei 2 und in Datei 2 sind demzufolge auch nicht alle Sätze zu finden. Es sollen die Felder der gefundenen Sätze in Datei 1 upgedated werden (scheußliches Wort).
Hi,
versuchs mal hiermit:
update mdv/fzs
set (fzsleasvar, fzsleasvnr, fzsleasend) =
(select fzsleasvar, fzsleasvnr, fzsleasend
from mdv/lea where fzskeyknd=lea.fzskeyknd)
where mdv/fzs.fzskeyknd in (Select fzskeyknd from mdv/lea where fzskeyknd=lea.fzskeyknd)
Auf jeden Fall muss da noch das Where ... In ... rein
Gruß
Sascha
Habe den String wie folgt geändert:
update mdv/fzs set (fzsleasvar, fzsleasvnr, fzsleasend) = (select
fzsleasvar, fzsleasvnr, fzsleasend from mdv/lea where
fzskeyknd=lea.fzskeyknd)
where fzs.fzskeyknd in (select fzskeyknd from mdv/lea
where fzskeyknd=lea.fzskeyknd)
Resultat ist immer noch:
Ergebnis der Anweisung enthält mehr als eine Zeile.
Update mit Subselect MUSS genau eine 1:1-Beziehung liefern.
D.h.: in der Where-Bedingung muss der gesamte eindeutige Schlüssel genannt werden.
update ufile a set ... = (
select ... from qfile b where a.key=b.key)
where a.key in (select c.key from qfile c where ...)
.key muss der gesamte Schlüssel (a.key1=b.key1 and ...) sein, bei der in-Klausel darf ja leider nur ein Feld benannt werden, dieses muss dann zusammengebaut werden:
a.key1 concat a.key2 ... = c.key1 concat c.key2 ...
Ist eines der Felder numerisch, kann es per DIGITS bzw. CHAR in Alpha gecastet werden.
Dieses Problem ist in verschiedensten Varianten hier bereits beschrieben.