View Full Version : SQL Subselect mit exists und no exists
camouflage
10-03-22, 09:15
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
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.
camouflage
10-03-22, 10:26
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.
Gehört das nicht sowieso zum Handwerk;-)?
camouflage
10-03-22, 12:23
Qui sine peccato est vestrum, primus in illam lapidem mittat. ;-)
Immer diese Altgriechen:D.
Und warum willst Du denn 2 SELECT Statements verwenden, wenn eines reichen würde?
Update Transaktion
Set Status = '1'
Where Exists (Select *
From Master
Where (Trkey = Makey And Masts = '1')
Or Trkey <> Makey);
camouflage
10-03-22, 16:19
Danke Birgitta, bist ein Schatz ;-).
<colgroup><col><col></colgroup><tbody>
MaKey
MaSts
TEST1
0
TEST2
1
</tbody>
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?
camouflage
11-03-22, 13:01
Max,
Du hast Recht.
Birgitta's Lösung updatet gleich alle Records. Kompliment zurück.
Meine ursprüngliche Lösung ist korrekt.