[NEWSboard IBMi Forum]
  1. #1
    dino is offline [professional_User]
    Registriert seit
    May 2006
    Beiträge
    341

    SQL: Update in Datei B, wenn Datei A best. Info enthält

    Hallo zusammen,
    habe bisher SQL nur für Update usw. einer einzigen Datei genutzt.
    Wie ist die exakte Syntax, wenn ich ein Update in Datei B/Feld B durchführen möchte, wenn Datei A/Feld A z.B. den Inhalt "X" hat ?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Update DateiB B set B.FeldB=Wert
    where exists (select * from DateiA where B.Key=A.Key and A.FeldX='A')

    Wert kann auch ein Select sein:

    Wert:= (Select C.Feld from DateiC C where b.key = c.key)
    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

  3. #3
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Update DateiB B set B.FeldB=Wert
    where exists (select * from DateiA where B.Key=A.Key and A.FeldX='A')

    Wert kann auch ein Select sein:

    Wert:= (Select C.Feld from DateiC C where b.key = c.key)
    Hallo Herr Fuerchau,

    Habe in die Datei ZSTDP ein neues Feld hinzugefügt(STS) und wollte es mit dem Feld(VKO) von der Datei ZW9ARB auffüllen.

    Bekomme aber die Meldung:
    Nullwerte für Spalte oder Variable STS nicht zulässig.
    Code:
    UPDATE ZSTDP B SET           
    B.STS = (SELECT A.VKO FROM         
    ZW9ARB A WHERE B.RMC = A.RCD)
    Beim Select ausführen bekomme ich aber keine Nullwerte.


    Gruß

    Tarki

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    In dem Inner-Select bestimmst du die Beziehung der Herkunft.
    Aber du hast wohl auch Daten in ZSTDP wo du keine Entsprechung in ZW9ARB hast, daher der Null-Wert.
    Deshalb die Where-Klausel mit Exists zur Update-Anweisung.

    Alternativ kannst du auch "coalesce( (select ...), b.sts)" in der Set-Anweisung verwenden.
    Mit dem Exists wirds aber u.U. schneller, da weniger Updates durchgeführt werden.
    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
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    In dem Inner-Select bestimmst du die Beziehung der Herkunft.
    Aber du hast wohl auch Daten in ZSTDP wo du keine Entsprechung in ZW9ARB hast, daher der Null-Wert.
    Deshalb die Where-Klausel mit Exists zur Update-Anweisung.

    Alternativ kannst du auch "coalesce( (select ...), b.sts)" in der Set-Anweisung verwenden.
    Mit dem Exists wirds aber u.U. schneller, da weniger Updates durchgeführt werden.
    ... was aber (wieder einmal) nicht zum selben Resultat führen muss. Bei der Where exists Variante werden Sätze ohne Entsprechung in Ruhe gelassen, bei der coalesce Variante auf einen Initwert gesetzt...

    ... mit Brille ... habe das b.xxx im coalesce nicht gesehen

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von Fuerchau Beitrag anzeigen
    In dem Inner-Select bestimmst du die Beziehung der Herkunft.
    Aber du hast wohl auch Daten in ZSTDP wo du keine Entsprechung in ZW9ARB hast, daher der Null-Wert.
    Deshalb die Where-Klausel mit Exists zur Update-Anweisung.

    Alternativ kannst du auch "coalesce( (select ...), b.sts)" in der Set-Anweisung verwenden.
    Mit dem Exists wirds aber u.U. schneller, da weniger Updates durchgeführt werden.
    Habe schon vorher mit exists herumexperimentiert, aber
    ich weiss nicht wie ich das exist im Statement einbauen soll.

    Gruß

    Tarki

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    UPDATE ZSTDP B SET
    B.STS = (SELECT A.VKO FROM
    ZW9ARB A WHERE B.RMC = A.RCD)
    where exists (select * from ZW9ARB C WHERE C.RMC = A.RCD)
    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
    Apr 2012
    Beiträge
    360
    Dieses SqlStatement hätte ich schon versucht, aber bekomme die Fehlermeldung:
    Qualifikationsmerkmal für Spalte oder Tabelle A nicht definiert.

    Wieso erkennt er im exists-Teil die Datei ZW9ARB A nicht an?

    bzw. wie würde das Statement eigentlich mit coalesce aussehen?

    Performance wäre eigentlich egal, da ich das Statement nur genau 1 mal brauche.

  9. #9
    Registriert seit
    May 2002
    Beiträge
    1.121
    ich denke das letzte müste C.RCD heißen

    where exists (select * from ZW9ARB C WHERE B.RMC = C.RCD)

  10. #10
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke!
    Ihr seid einfach die BESTEN!

    Gruß

    Tarki

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Teppfuhler sind fohrgeseen .
    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

  12. #12
    Registriert seit
    Apr 2012
    Beiträge
    360
    ... und dürfen behalten werden

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 - logische Datei - Update auf falschem Satz
    By rissling in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 28-03-11, 18:51
  3. SQL Update 2 Dateien
    By moskito in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 30-08-06, 17:30
  4. Update Syntax SQL
    By wuwu in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-07-06, 15:31
  5. SQL .. for update of (RPG embedded SQL)
    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
  •