-
SQL Update aus zwei Dateien mit 3 Schlüsselfeldern
Hallo zusammen,
ich weiß das wir das Thema schon öfter behandelt haben,
aber nach langer Suche und Versuchen will es mir einfach
nicht gelingen.
Ich habe zwei Dateien mit gleichem Aufbau. Es soll ein
UPDATE auf ein Feld von Datei 1 mit Wert aus Datei 2 erfolgen.
In Datei zwei sind aber nicht alle Schlüsselkombinationen
enthalten.
update mk/lprm01p A set LVAL=
( select c.lval from mk/lprm01p c
join mk/lprm01pold b
on c.lpgm = b.lpgm
and c.llnr = b.llnr
and c.lent = b.lent )
Die Aweisung bringt die Meldung
Ergebnis der Anweisung enthält mehr als eine Zeile
Kann mir vielleicht jemand auf die Sprünge helfen.
Vielen DAnk
-
Anhang:
update ....
)
where a.key1 concat a.key2 ... in (select x.key1 concat x.key2 ... from datei x)
-
Hallo Baldur,
wenn ich dich richtig verstanden habe dann sollte es doch so aussehen
update mk/lprm01p A set LVAL=
( select b.lval from mk/lprm01pold B
join mk/lprm01p C
on c.lpgm = b.lpgm
and c.llnr = b.llnr
and c.lent = b.lent )
where a.lpgm concat a.llnr concat a.lent
in (select b.lpgm concat b.llnr concat b.lent
from mk/lprm01pold b)
Damit kommt aber auch die Meldung
Ergebnis der Anweisung enthält mehr als eine Zeile.
Ich hab's einfach nicht mit SQL. Vielleicht sollte ich mir
einkleines Pgmle schreiben.
Gruss
Michael
-
Hallo,
versuch's mal mit der folgenden Syntax:
PHP-Code:
update MyTable2 A
set (A.Feld1, A.Feld2) = (select Distinct B.Feld1, B.Feld2
from Mytable1 B
where A.Key1 = B.Key1
and A.Key2 = B.Key2
and A.Key3 = B.Key3)
where exists (select C.Key1, C.Key2
from MyTable1 C
where A.Key1 = C.Key1
and A.Key2 = C.Key2
and A.Key3 = C.Key3)
Überigens die Lösung mit der IN-Anweisung und verketteten Feldern dürfte zu einer reichlich schlechten Performance führen, da der Optimizer für diesen SUB-Select keinen vorhandenen Zugriffs-Pfad verwenden kann, sondern einen Table Scan machen wird. Der Grund dafür liegt darin, dass durch das Verketten (Concat) ein neues Feld generiert wird, für das weder ein Zugriffs-Pfad vorhanden ist, noch angelegt werden kann.
Birgitta
-
Hallo Birgitta,
das war des Rätsels Lösung.
update mk/lprm01p A set a.LVAL=
( select distinct b.lval from mk/lprm01pold B
where a.lpgm = b.lpgm
and a.llnr = b.llnr
and a.lent = b.lent )
where exists
(select c.lpgm , c.llnr, c.lent
from mk/lprm01pold c
where a.lpgm = c.lpgm
and a.llnr = c.llnr
and a.lent = c.lent )
Vielen Dank euch beiden für die Hilfe
und viele Grüße
Michael
-
Das mit dem DISTINCT solltest du aber nicht so als Grundsatz verstehen, da du damit nur das Problem mehrerer Zeilen für genau diesen einen Fall ausschließt.
Aufgrund der Where-Klausel kann es trotzdem zu mehreren Sätzen kommen, wenn die Beziehung nicht EINDEUTIG mit einer 1:1-Beziehung vorhanden ist.
Deine Schlüssel vermuten da eher eine 1:N-Beziehung.
-
Nochmals DANKE
Habe das ganze auch ohne Distinct laufen lassen,
und es klappt.
Gruss Michael
-
Respekt
Also ich habe gedacht das ich gut bin was SQL angeht, aber DB2 hatte ich immer Schwierigkeiten, bin halt nen MS SQL Programer ;-)
Aber wenn ich sowas lese muss ich echt sagen
RESPEKT
da kann selbst ich was lernen.
schönen Tag
Martin
-
MS SQL kann sowas aber auch.
Es kommt da weniger auf die Syntax und Funktionen an sondern mehr auf den Lösungsansatz.
-
MS Sql
Das stimmt,
aber am SQL Server würde ich das ganz anders machen
in etwa so:
UPDATE Tabelle A
SET A.sdsd=B.sdsd, A.afaf=B.afaf
FROM Tabelle A LEFT JOIN Tabelle2 B
ON a.s = B.s and A.f = B.f and A.i =B.i
WHERE ....
so würde ich das da machen, und mache ich auch :-)
bis dann
Martin
-
UPDATE ... SET ... FROM ... ???
Sachen gibts ...
-
Zitat von MWendel
Das stimmt,
aber am SQL Server würde ich das ganz anders machen
in etwa so:
UPDATE Tabelle A
SET A.sdsd=B.sdsd, A.afaf=B.afaf
FROM Tabelle A LEFT JOIN Tabelle2 B
ON a.s = B.s and A.f = B.f and A.i =B.i
WHERE ....
so würde ich das da machen, und mache ich auch :-)
bis dann
Martin
Das funktioniert auf der DB2 for i?!
Ich denke doch nicht, da es nicht SQL Standard ist.
Birgitta
Similar Threads
-
By Bobou in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 22-11-06, 08:26
-
By moskito in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 30-08-06, 17:30
-
By desti82 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-07-06, 15:25
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By juniorprog in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-02-06, 11:17
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks