[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.114

    SQL mit 2 Dateien

    Hallo *all,

    im Moment stehe ich ein wenig auf der Leitung.

    Was mach ich hier falsch?
    Token , ungültig. Gültige Token: SET.



    update ADR01PF T01,
    ADR04PF T02
    set A4AFO4 = 2
    WHERE T01.ADKTO = T02.A4KTO

    AND( ADSTS = 0
    AND ADFA = 1
    AND AD##26 IN (420, 105, 13, 36, 436)
    AND T01.ADID1 <> 11008)

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Du kannst in SQL nur eine einzige Datei gleichzeitig aktualisieren.

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Ich will ja auch nur eine Datei updaten nämlich die adr04pf, brauch aber die erste um die Daten sauber zu bekommen.

    Wie müßet das denn umgebaut werden damit das passt?
    Gruß
    Gregor

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Update MyFileA a
    set Field = (select Field from MyFileB b where a.key=b.key and ...)
    where a.field = ... and a.field2=...
    and a.key in (select c.key from MyFileB c where ...)

    Sieht etwas kompliziert aus, ist es aber nicht:

    Im Subselect (select ...) wählst du das Quell-Feld mit dem Bezug über where, in der letzten Where-Klausel bestimmst du deine Sätze und mit dem letzten Subselect " ... in (select...) " stellst du sicher, dass nur Sätze in A upgedatet werden, die auch in B vorhanden sind.
    Ansonsten bekommst du ggf. NULL-Werte die in Datei A auch erlaubt sein müssten.
    Das kannst du nur dann sparen, wenn du sicher bist, dass in B alle Sätze für A vorhanden sind.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo,

    ich möchte ja die Konstante 2 zuweisen.

    Oder verstehe ich da etwas falsch?

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    Du must in der Where-Bedingung einen Sub-Select angeben.
    Etwa so:
    PHP-Code:
    update ADR01PF T01
    set A4AFO4 
    WHERE Exists 
    (Select Distinct ADKTO
                    from ADR04PF 
                    Where     ADKTO 
    A4KTO 
                          
    and ADSTS 0
                          
    and ADFA 1
                          
    and AD##26 IN (420, 105, 13, 36, 436) 
           
    AND ADID1 <> 11008 
    Ohne Garantie, da ich nicht weiss, welche Felder aus welcher der beiden Dateien sind.

    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hat DISTINCT bei EXISTS nicht eher nagativen Einfluss ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo,
    danke für den Hinweis, jetzt sieht es so aus.
    update ADR04PF t02
    set A4AFO4 = 2

    WHERE exists (select adkto from adr01pf t01
    where t01.adkto = t02.a4kto
    AND( ADSTS = 0
    AND ADFA = 1
    AND AD##26 IN (420, 105, 13, 36, 436)
    AND ADID1 <> 11008))

    und scheint auch zu funktionieren.

    Mein Problem ist aber das ich jetzt nur 97 Sätze im Update habe, ich hatte mir aber ein Query gebastelt und das mit rtv in ein SQL umgewandelt. Beim Query hatte ich aber 265 Sätze als Ergebnis.

    Wie kann ich denn jetzt ab geschicktest rausbekommen warum er nicht das macht was ich mir wünsche.

    Der Select sieht so aus,
    SELECT
    ALL t01.adkto, T02.A4AFO4
    FROM SOE01/ADR01PF T01,
    SOE01/ADR04PF T02
    WHERE T01.ADKTO = T02.A4KTO
    AND( ADSTS = 0
    AND ADFA = 1
    AND AD##26 IN (420, 105, 13, 36, 436)
    AND T01.ADID1 <> 11008)

    Wobei mir auf Anhieb auffällt, das im Ergebnis alle die Sätze fehlen wo A4AFO4 den Wert Null hat (Format numerisch)
    Kann man den Aufbau einer Query eigentlich anzeigen lassen?

    Gruß
    Gregor

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das Problem ist, dass der RTV keinen LEFT JOIN erkennt sondern leider immer einen Inner join generiert.

    Das Selbe gilt eben auch, für den EXISTS, der einem Inner Join entspricht.

    Prüfe mal, ob deine Bedingung denn so stimmt, denn EXISTS und NOT EXISTS (entspräche NULL), würde doch ALLE Sätze umfassen.

    Also irgendeine Zusatzbedingung fehlt da wohl noch.

    Prüfe mal die Feldbedingungen von T01 zu T02.

    PS:
    Mit meinem SQLCPY wäre das nicht passiert
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Wobei nachvollziehen kann ich es nicht.

    Ich nehme die Datei adr01pf und selektiere die mit der where Bedingung. Dann habe ich die Datei adr04pf verküpfe diese mit der adr01pf über das Feld adr01pf.adkto = adr04pf.a4kt0 und will ja dort das Feld adr04pf.a4afo4 auf den Wert 2 setzen.
    Wieso ich dann nur die Sätze angezeigt bekomme wo das Feld a4afo4 einen Wert hat verstehe ich nicht.

    Gruß
    Gregor

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Was nicht da ist, kann man auch nicht lesen oder wie war das?

    Danke für die Hilfe

    Gruß
    Gregor

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Stimmt, prüfe mal die Verknüpfungsart im Query (nur gleiche Sätze!).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL Update aus zwei Dateien mit 3 Schlüsselfeldern
    By mk in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 13-07-12, 08:53
  2. SQL Update über 3 Dateien
    By Bobou in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 22-11-06, 08:26
  3. SQL Case von mehreren Dateien
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-08-06, 09:34
  4. SQL UPDATE, verknüpfung zweier Dateien
    By desti82 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-07-06, 15:25
  5. SQL über 168 Dateien
    By mikex01 in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 21-04-06, 16:11

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •