-
SQL mit Update + Join
Hallo geschätzte SQL-Spezies !
Wir möchten gerne Feld1 mit Feld2 in Datei A via SQL updaten, wobei das Feld2 gejoint aus Datei B stammt. Im MS Acces kein Problem. Auf der AS bin ich zu dusselig. Bitte um hilfreiche Hinweise.
Danke
Harald
Harald Wallukat
Am Grafacker 2
40789 Monheim
Telefon +49 2173 32503
Mobile +49 171 4137771
harald.wallukat@web.de
-
update fileA
set feld1 = (select feld2 from fileb where filea.key = fileb.key)
where filea.key in (select fileb.key from fileb)
Die where-Bedingung ist dann erforderlich, wenn filea mehr Schlüssel als fileb enthält, da sonst der 1. Subselect einen NULL-Wert liefert, falls der Schlüssel in fileb nicht vorhanden ist.
Bei mehreren Schlüsselfeldern kann die jeweilige where-bedingung natürlich ergänzt werden.
-
Vielen Dank !
Hat prima geklappt und der Fall wurde
in den Tipps+Tricks notiert.
Grüße
Harald Wallukat
Harald Wallukat
Am Grafacker 2
40789 Monheim
Telefon +49 2173 32503
Mobile +49 171 4137771
harald.wallukat@web.de
-
Hallo *all,
ich bräuchte mal einen Denkanstoß.
Ich habe wie der Vorredner auch eine Datei in der ich 3 Felder updaten will. Die Logik ist zwar klar, allein die Syntax bekomme ich gedanklich nicht hin.
Das ist die Ausgangssituation:
update x/ipdocim a set a.imbelj = 13,
a.imbeld = '20' !! substr(digits(akkdt2), 1, 2)
!! substr(digits(akkdt2), 3, 2) !! substr(digits(akkdt2), 5, 2),
a.imadrn = akkto
join xxx/ako01pf b on (a.imbeln = b.akanr and akkdt2 > 130101)
where (IMBELN > 148125 and IMBELN < 148129
and IMBELA = 'AS'
and IMBELJ <> 13)
Jetzt müßte ja das join in ein update a.imbeld = select ..... umgebaut werden.
Für Hinweise dankbar.
GG
-
Hallo GG,
ohne das jetzt getestet zu haben, denke ich mal in etwa so
PHP-Code:
Update x/ipdocim a Set(a.imbeld, a.imadrn ) = (Select '20' concat SubStr(Digits(b.akkdt2), 1, 2) concat SubStr(Digits(b.akkdt2), 3, 2) concat SubStr(Digits(b.akkdt2), 5, 2), akkto from xxx/ako01pf b where a.imbeln = b.akanr and b.akkdt2 > 130101) where imbeln between 148125 and 148129 and imbela = 'AS' and imbelj <> 13 and imbeln in (Select akanr from xxx/ako01pf where akkdt2 > 130101)
Gruß
Ronald
-
Danke,
das ist es. Hat jetzt nur noch ein paar Sekunden gedauert weil ich noch ein distinct unterbringen mußte.
-
Tja leider doch nicht, ich weis nicht was er will, aber wenn ich das Statement loslasse, kommt er mir mit einem
Nachrichten-ID . . . . : SQL0407 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Nachricht . . . : Nullwerte für Spalte oder Variable IMBELD nicht zulässig.
Ursache . . . . : Einer der folgenden Fehler ist aufgetreten: Spalte IMBELD
ist eine Zielspalte in einer Anweisung UPDATE oder INSERT für Tabelle
IPDOCIM in xx. Es wurde ein Nullwert festgelegt, um in dieser Spalte
eingefügt oder aktualisiert zu werden, oder es wurde kein Wert für die
Spalte in einer Anweisung INSERT angegeben und für die Spalte sind keine
Nullwerte zulässig. Der Nullwert wurde mit der relativen Eintragsnummer 1
in der Liste VALUES, SELECT oder in der SET-Klausel angegeben.
-- Spalte IMBELD ist eine Zielspalte in einer Anweisung ALTER für Tabelle
IPDOCIM in xx. Das Attribut der Spalte IMBELD darf nicht in NOT NULL
geändert werden, da bereits ein Nullwert mit der Eintragsnummer 1 der Spalte
vorhanden ist.
-- Variable IMBELD ist eine Zielvariable in einer SQL-Prozedur, -Funktion
wieder
selbst wenn ich es in
Update xx/ipdocim a
Set(a.imbeld, a.imadrn, a.imbelj) =
(Select '20130101',
akkto, '13'
from xxx/ako01pf b where a.imbeln = b.akanr and b.akkdt2 >
130101)
where imbeln between 140000 and 167399
and imbela = 'AS'
and imbelj <> 13
ändere bekomme ich den Fehler.
Was will er von mir?
Ein normales select auf die Daten ergibt
Beleg-ID: Belegdatum Beleg-ID: Adreßnummer KTO KDT2
Belegnummer CCYYMMTT Nummernkreis-Jahr Ident Auft.
nummer Datum
148.127 2003.09.15 03 11.481 30047 13.04.19
148.127 2003.09.15 03 11.481 30047 13.04.19
148.127 2003.09.15 03 11.481 30047 13.04.19
148.854 2003.09.22 03 6.092 29435 13.04.30
148.854 2003.09.22 03 6.092 29435 13.04.30
148.854 2003.09.22 03 6.092 29435 13.04.30
148.854 2003.09.22 03 6.092 29435 13.04.30
149.267 2003.09.16 03 11.451 7097 13.05.06
149.331 2003.09.16 03 11.571 4298 13.05.07
149.352 2003.11.03 03 3.147 8672 13.05.07
-
Du benötigst noch einen
and exists (select * from ako01pf c where a.imbeln = c.akanr and c.akkdt2 >
130101)
Wenn nämlich kein Satz gefunden wird, liefert der Subselect NULL-Werte.
Diese sind wohl in deiner Zieltabelle nicht zulässig.
Anmerkung:
Wenn NULL-Werte zulässig wären, hättest du die Inhalte für nicht existierende Daten auf NULL gesetzt!
-
Jo danke Dir,
jetzt läuft der Sack aber wieder auf den Fehler das angeblich "Ergebnis der Anweisung enthält mehr als eine Zeile"
obwohl ich ein dsitinct beim select gemacht habe.
Da ja ein fetch first row in dem select nicht zulässig ist, würde ich es jetzt über eine Funktion machen wollen.
Werde noch was tüfteln.....
GG
-
Ein Subselect erlaubt auch Aggregate, vielleicht hilfts ja:
from (select a, b, min(c) from myfile where ... group by a, b) x
-
Hallo *all,
ich habe mir jetzt eine Funktion geschrieben die mir die Adresse ranholt die ich haben will. Dummerweise ist die Information >imbeln< in Datei 2 >ipdocim< die ich benötige um Datei 1 >ipdociv< upzudaten.
Habe folgendes geschrieben.
update ipdociv a
set iivalu = akoname(imbeln) where
iidoci in (select imdoci from ipdocim)
Mir fällt auf Anhieb nicht ein wie ich das Update umbauen müßte.
Geht das überhaupt oder muß man sich das was ganz anderes einfallen lassen?
Für Hinweise dankbar.
GG
Similar Threads
-
By mk in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 13-07-12, 08:53
-
By ahingerl in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 08-12-06, 08:28
-
By cassi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-11-06, 15:03
-
By wuwu in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-07-06, 15:31
-
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