Zitat Zitat von Fuerchau Beitrag anzeigen
Wie schon beschrieben, CTE's sind alternative Schreibweisen.
Was macht SQL eigentlich?
Da alle nur mit Wasser kochen, i.W. nichts anderes als ein Programmierer auch.
Der Programmierer überlegt sich vorher seine Zugriffe (LF's) bevor er loslegt. Anschließend werden die Zugriffe von links nach rechts vorgenommen.
Dabei wird links 1 Satz gelesen und nach rechts die passenden Daten je Join ermittelt, wobei dieser Join über Index am Besten ist um die Zugriffe zu reduzieren.
Die Schwierigkeit besteht halt, die Beziehung und die Where-Klausel unter einen Hut zu bringen.
Der Optimizer kann halt nur versuchen, das beste herauszuholen.

CTE's verkürzen nur die Schreibweise aber sparen nicht die Zugriffe!

Was temporäre Tabellen in QTEMP angeht so kann man hier noch mal mit Indizes beschleunigen.
Das Schöne an SQL:
DROP TABLE löscht automatisch auch alle Indizes!

Und wer mit Transaktionen arbeitet:
Hier kann man kurzfristig mit "Set Transaction" die Transaktion aussetzen bzw. bei einigen Befehlen (Update/Insert/Delete) "WITH NC" für QTEMP-Tabellen anwenden.
... was Einfluss hat ist:
- ob ein Cursur read only ist
- scrollable oder nicht
Indexe auf Temp tables braucht man eigentlich kaum noch (wenn es einen braucht, macht es sich einen und cached den)
@commit: Da muss man beachten, dass set connection nur an einer Transaktionsgrenze geht und die with Klausel kein SQL Standard ist. Besser und einfacher ist da, die Temp Tabellen in einer eigenen ACTGRP (und damit eigenem SRVPGM) zu verarbeiten, dann kann man diese Connection mit Isolation level no commit verarbeiten (CRTSQLRPGI COMMIT(*NONE))

D*B