-
Komplexes SQL-Statement
Zuerst mal hallo zusammen.
Ich habe ein Problem mit einem SQL-Statement auf der AS/400 bzw. iSeries.
Es soll ein Feld geändert werden, wenn 4 verschiedene Bedingungen erfüllt sind.
Hier die Tabellen:
Tabelle Artikel (atstam):
Firmen-Nr. (firnr)
Artikel-Nr. (artnr01)
Präfix (artnr02)
Artikelhauptgruppe (arthg)
etc.
Tabelle Art-Lief-Verknüpfung (artlif):
Firmen-Nr. (firnr)
Artikel-Nr. (artnr01)
Lieferant (lifnr)
Ich möchte in allen Datensätzen die Artikelhauptgruppe auf z.B. '007' setzen, wenn:
1. die Firmennummern in beiden Tabellen gleich sind
2. die Artikelnummern in beiden Tabellen gleich sind
3. der Präfix in der Artikeltabelle nicht 'XYZ' ist
4. der Lieferant in der Art-Lief-Verknüpfung gleich '0815' ist
Einen SELECT mit den Bedingungen bekomme ich hin, aber den UPDATE-Befehl, aus welchen Gründen auch immer, nicht. (Wahrscheinlich stelle ich mich zu blöd an)
Hier mein bisheriges SQL-Statement:
update atstam
set arthg = '007'
where exists (
select atstam.firnr, atstam.artnr01, atstam.artnr02, atstam.arthg, artlif.lifnr
from atstam, artlif
where atstam.firnr = artlif.firnr
and atstam.artnr01 = artlif.artnr01
and atstam.artnr02 <> 'XYZ'
and artlif.lifnr = '0815')
Mittlerweile läuft's zwar durch, jedoch werden im Moment alle Datensätze geändert.
Bin jetzt schon ne Weile am rumdoktorn und bekomme es einfach nicht hin.
Ihr seid sozusagen meine letzte Hoffnung ;-)
Für Eure Hilfe jetzt schon herzlichen Dank
Gruss, der Nickelär
-
Du darfst im Subselect nicht nocheinmal den Artikelstamm angeben. Es werden alle Updates gemacht, wenn zumindest 1 Satz die Bedienungen erfüllt.
Besser daher:
update atstam
set arthg = '007'
where atstam.artnr02 <> 'XYZ' and atstam.firnr in (
select artlif.firnr from artlif
where atstam.artnr01 = artlif.artnr01
and artlif.lifnr = '0815')
LG Rob
-
Hallo,
Du musst in Deinem Subselect nochmal mit die beiden Artikelstämme verknüpfen über den eindeutigen Schlüssel (vermutlich Artikel-Nr.) verknüpfen.
Etwa so:
PHP-Code:
update atstam a
set a.arthg = '007'
where exists (select b.firnr, b.artnr01, b.artnr02, b.arthg, artlif.lifnr
from atstam b, artlif
where b.firnr = artlif.firnr
and b.artnr01 = artlif.artnr01
and b.artnr02 <> 'XYZ'
and artlif.lifnr = '0815'
and a.artnr01 = b.artnr01)
Birgitta
-
Hallo !
Deine Unterabfrage liefert vermutlich immer das gleiche Ergebnis, egal welchen Datensatz der UPDATE gerade bearbeitet. Aber wenn du in deiner SQL-Anweisung
select atstam.firnr, atstam.artnr01, atstam.artnr02, atstam.arthg, artlif.lifnr from atstam, artlif
durch
select * from artlif
ersetzt, dann kannst du mit deinen Bedingungen einen Bezug zum aktuellen Datensatz im UPDATE herstellen und dann sollte es gehen.
Viele Grüße
Jürgen
-
Vielen Dank
 Zitat von RobertPic
Du darfst im Subselect nicht nocheinmal den Artikelstamm angeben. Es werden alle Updates gemacht, wenn zumindest 1 Satz die Bedienungen erfüllt.
Besser daher:
update atstam
set arthg = '007'
where atstam.artnr02 <> 'XYZ' and atstam.firnr in (
select artlif.firnr from artlif
where atstam.artnr01 = artlif.artnr01
and artlif.lifnr = '0815')
LG Rob
Vielen Dank für die prompte Hilfe.
Hat auch ohne Probleme funktioniert.
-
Vielen Dank
 Zitat von B.Hauser
Hallo,
Du musst in Deinem Subselect nochmal mit die beiden Artikelstämme verknüpfen über den eindeutigen Schlüssel (vermutlich Artikel-Nr.) verknüpfen.
Etwa so:
PHP-Code:
update atstam a set a.arthg = '007' where exists (select b.firnr, b.artnr01, b.artnr02, b.arthg, artlif.lifnr from atstam b, artlif where b.firnr = artlif.firnr and b.artnr01 = artlif.artnr01 and b.artnr02 <> 'XYZ' and artlif.lifnr = '0815' and a.artnr01 = b.artnr01)
Birgitta
Vielen Dank auch Dir.
Leider hat Dein Statement bei mir nicht funktioniert, aber komme jetzt trotzdem weiter.
-
Last but not least
 Zitat von Pikachu
Hallo !
Deine Unterabfrage liefert vermutlich immer das gleiche Ergebnis, egal welchen Datensatz der UPDATE gerade bearbeitet. Aber wenn du in deiner SQL-Anweisung
select atstam.firnr, atstam.artnr01, atstam.artnr02, atstam.arthg, artlif.lifnr from atstam, artlif
durch
select * from artlif
ersetzt, dann kannst du mit deinen Bedingungen einen Bezug zum aktuellen Datensatz im UPDATE herstellen und dann sollte es gehen.
Viele Grüße
Jürgen
Auch Dir ein herzliches Danke schön.
Auch Dein Statement hat mir weitergeholfen, so dass ich mir jetzt eine der beiden Varianten aussuchen kann ;-)
Ich hätte wahrscheinlich noch Stunden dafür gebraucht.
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 15-11-04, 12:15
-
By Pia in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 18-04-02, 15:24
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