-
Update mittels SQL
Hallo allerseits,
ich hätte da wieder mal eine Frage an die SQL-Gurus unter euch.
Ich versuche 2, vom Satzaufbau gleiche Dateien miteinander zu vergleichen und die erste mit Werten der zweiten upzudaten:
Code:
UPDATE RWLEX777/EIGENV as A set A.EIMZWF = B.EIMZWF,
A.EIKTOS = B.EIKTOS, A.EIKSTS = B.EIKSTS, A.EIKTOH = B.EIKTOH,
A.EISTRF = 2 where A.EIBELN CONCAT A.EIPOS in(SELECT B.EIBELN
CONCAT B.EIPOS FROM RWLSAV777/EIGENV060 as B) AND A.EIBELN = 437152
Qualifikationsmerkmal für Spalte oder Tabelle B nicht definiert.
Aber wie ihr sehen könnt, erhalte ich obige Fehlermeldung. Kann mir bitte jemand dabei helfen?
Danke schon mal im voraus
-
Mit der Where-Klauses schränkst du die Suche nur ein erhältst aber keinen Zugriff auf das Ergebnis.
Für den Update gibt es 2 Varianten (je nach Release):
update file1 a
set
a.field1 = (select b.field1 from file2 b where a.key=b.key)
,a.field2 = (select b.field2 from file2 b where a.key=b.key)
:
:
where exists (select * from file2 b where a.key = b.key)
Ab neueren Releasen kann man das nun vereinfachen:
update file1 a
set (a.feld1, a.feld2 ...) = (select b.feld1, b.feld2 ... from file2 b where a.key=b.key)
where exists (select * from file2 b where a.key = b.key)
-
Hallo Fuerchau,
danke schon mal für die rasche und wie immer sehr detaillierte Hilfe. Eine kurze Frage noch zu den Releasen. Ab welchem Release funktioniert denn die 2. Variante eigentlich? Wir haben hier noch V5R4 im Einsatz.
-
Ab da müsste es gehen, versuchs doch einfach.
-
PS:
Dein "... where ... concat ... in (select ... concat ... )" ist die schlechteste Lösung überhaupt.
Wenn du einen Schlüssel (auch über mehrere Felder) hast ist ein "... exists (select ...)" der schnellste Weg (ich glaube seit V3).
-
Oh, danke für die Info; dann müsste das Statement für meine Zwecke also so lauten:?
Code:
update RWLEX777/EIGENV a
set (a.EIMZWF, a.EIKTOS, a.EIKSTS, a.EIKTOH) =
(select b.EIMZWF, b.EIKTOS, b.EIKSTS, b.EIKTOH from
RWLSAV777/EIGENV060 b where a.EIBELN=b.EIBELN and a.EIPOS=b.EIPOS)
where exists (select * from RWLSAV777/EIGENV060 b where
a.EIBELN=b.EIBELN and a.EIPOS=b.EIPOS)
Und genau so hat es dann funktioniert. Danke nochmal für die rasche Hilfe
-
Laut V5R4.Handbuch sollte das gehen.
Um die Syntax eines SQL's vor der Aktion zu prüfen kannst du im STRSQL per F13 Auswahl 1 ja die Option (ich weiß i.M. nicht welche, aber das siehst du ja) von *RUN auf *SYN umschalten.
-
Hallo Fuerchau,
danke nochmal das hat wunderbar funktioniert. Das mit dem Syntaxcheck habe ich - ich muss es gestehen - bis jetzt noch nicht verwendet. Einzig und allein die Sicherung der Sessions habe ich schon des öfteren verwendet.
Similar Threads
-
By mk in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 13-07-12, 08:53
-
By steven_r in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 25-09-06, 08:22
-
By wuwu in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-07-06, 15:31
-
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
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