[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2005
    Beiträge
    103

    Question SQL - Update mit Subselects

    Hallo zusammen,

    möchte eine Datei in Abhängigkeit einer anderen Datei nur dann updaten, wenn dort der enstprechende Satz gefunden wurde:

    update v#vsta00
    set vvswg0 = case when (select budget
    from budms09 where kdnr = vskdnr AND 'BUD99' = vstnr) <> 0 then
    (select budget
    from budms09 where kdnr = vskdnr AND 'BUD99' = vstnr) else vvswg0 end,

    ...

    where exists (Select budget from budms09 where vskdnr = kdnr)
    ;;

    Ursprünglich dachte ich, dass ich mir die Case-Anweisung sparen kann, weil ich ja in den Where-Bedingungen mit exists auf die Existenz der Subselect-Sätze abfrage. Dies führt jedoch stets zu der Meldung, dass keine NULL-Werte in das Feld vvswg0 geschrieben werden dürfen.

    Meine Case-Anweisung ist allerdings auch nicht ganz richtig, da das Feld Budget durchaus den Wert 0 haben darf, welcher hierüber jedoch auch abgefangen wird.
    Mit NOT NULL anstelle von <> 0 hab ich es schon versucht - Syntaxfehler.

    Wer weiß, wie es funktioniert?

    -- Tobias

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn auch mit 0 upgedatet werden darf, wenn keine Daten vorhanden sind dann gehts mit:

    update v#vsta00
    set vvswg0 = coalesce(select budget
    from budms09 where kdnr = vskdnr AND 'BUD99' = vstnr), 0)

    Ansonsten fehlt dir noch die 2. Bedingung:


    update v#vsta00
    set vvswg0 = (select budget
    from budms09 where kdnr = vskdnr AND 'BUD99' = vstnr)
    where exists (Select budget from budms09 where vskdnr = kdnr AND 'BUD99' = vstnr)
    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
    May 2005
    Beiträge
    103
    Hallo Fuerchau,

    vielen Dank für die prompte Antwort.
    Es lag an der 2. Bedingung im exists. Ich hab's eben selbst gemerkt, aber bevor ich meine Frage löschen konnte, bist du schon draufgekommen.
    Coalesce passt hier leider nicht, denn wenn nichts gefunden wurde, dann soll der alte Wert in vvswg0 bestehen bleiben.

    -- Tobias

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Naja, das geht ja auch:

    update v#vsta00
    set vvswg0 = coalesce(select budget
    from budms09 where kdnr = vskdnr AND 'BUD99' = vstnr), vvswg0)

    Mit dem exists reduzierst du nur die Anzahl Updates, wass ggf. schneller wird.
    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. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  3. Update Syntax SQL
    By wuwu in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-07-06, 15:31
  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 .. 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
  •