[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2004
    Beiträge
    6

    Smile 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

  2. #2
    Registriert seit
    Oct 2004
    Beiträge
    251
    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

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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.firnrb.artnr01b.artnr02,  b.arthgartlif.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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    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

  5. #5
    Registriert seit
    Nov 2004
    Beiträge
    6

    Vielen Dank

    Zitat 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.

  6. #6
    Registriert seit
    Nov 2004
    Beiträge
    6

    Vielen Dank

    Zitat 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.firnrb.artnr01b.artnr02b.arthgartlif.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.

  7. #7
    Registriert seit
    Nov 2004
    Beiträge
    6

    Last but not least

    Zitat 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

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. SQL Statement
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-11-04, 12:15
  5. SQL Statement
    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
  •