[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    905

    SQL Subselect mit exists und no exists

    Hallo Forum,

    Ich steh wieder mal auf Kriegsfuss mit SQL.

    Ich möchte ein Transaktionsfile mit einem Statuswert updaten, abhängig von einem Subselect des Masterfiles. Der Wert soll abhängig vom Record oder fehlen desselben sein.


    Beispiel:
    update Transaktion set Status = '1'
    where exists (select * from Master where TrKey = MaKey and MaSts = '1')
    or not exists (select * from Master where TrKey = MaKey);

    Mache ich mir hier etwas zu einfach?

    Danke für die Hilfe
    kf

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Sollte so funktionieren.
    Der 1. Exists schränkt ja zusätzlich auf and "MaSts = '1'" ein.
    Der Not Exists prüft nur die tatsächliche Nicht-Existenz des Schlüssel.

    Wenn du das ganze per Transaktion machen könntest, hast du immer die Chance, das Ergebnis vor einem Commit zu prüfen und wenn es nicht stimmt, das Programm abzubrechen um einen Rollback durchzuführen. Per Debugger könntest du auch SQLCODE auf -1 setzen um im Programm wahlweise Commit/Rollback zu machen.
    Transaktionen sind auch zum Testen außerordentlich hilfreich.
    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
    Jan 2007
    Beiträge
    905
    Hi Baldur,

    Danke für die Rückantwort. Es funktioniert wirklich so, wie gepostet, nur sollte man vorgängig gründlich die Daten prüfen. Mea culpa.
    kf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Gehört das nicht sowieso zum Handwerk;-)?
    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
    Jan 2007
    Beiträge
    905
    Qui sine peccato est vestrum, primus in illam lapidem mittat. ;-)
    kf

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Immer diese Altgriechen.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Und warum willst Du denn 2 SELECT Statements verwenden, wenn eines reichen würde?

    Code:
    Update Transaktion
       Set Status = '1'
       Where Exists (Select *
                        From Master
                        Where   (Trkey =  Makey And Masts = '1')
                              Or Trkey <> Makey);
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    905
    Danke Birgitta, bist ein Schatz ;-).
    kf

  9. #9
    Registriert seit
    Mar 2009
    Beiträge
    53
    MaKey MaSts
    TEST1 0
    TEST2 1


    Für mein Verständnis würde der Status beim SQL von camouflage für MaKey=TEST1 nicht auf 1 setzen, da es keinen TEST1 Satz mit MaSts=1 gibt aber min. ein TEST1 Satz vorhanden ist.
    Wärend beim Beispiel von Birgitta für TEST1 der Status auf 1 gesetzt wird, da zwar kein TEST1 Satz mit MaSts=1 gefunden wurde, aber ein Satz wo MaKey ungleich TEST1 ist.

    Oder verstehe ich das falsch?
    Angehängte Grafiken Angehängte Grafiken  

  10. #10
    Registriert seit
    Jan 2007
    Beiträge
    905
    Max,

    Du hast Recht.
    Birgitta's Lösung updatet gleich alle Records. Kompliment zurück.
    Meine ursprüngliche Lösung ist korrekt.
    kf

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von camouflage Beitrag anzeigen
    Qui sine peccato est vestrum, primus in illam lapidem mittat. ;-)
    Na ja, Chuck Norris wurde mal auf Latein beleidigt, seitdem ist es eine tote Sprache ;-)

    Aber schön das es Leute gibt die ab und zu mal die Bibel lesen ;-)

    GG 3368

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ja, ich wollte es aber diesmal nicht sein;-).
    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 if exists
    By Dschainers in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 21-08-20, 09:01
  2. SQL subselect
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 22-11-16, 19:15
  3. SQL-Update mit Subselect der selben Tabelle
    By sonicreducer in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 31-03-15, 19:27
  4. SQL Subselect
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 21-02-15, 18:29

Berechtigungen

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