Hallo!
Ich habe folgenden StoredProc-Body:
Code:
SELECT * FROM A WHERE NOT A.FELD1 IN (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));
Ich frage mich jetzt, wie Firebird den Ablauf realisiert. Wird für jede einzelne Zeile in Tabelle A das SELECT DISTINCT... ausgeführt? Oder wird zuerst einmalig das Ergebnis aus AndereProzedur() geholt und dann immer gegen dieses Ergebnis geprüft? Hintergrund der Frage ist die Laufzeitoptimierung. AndereProzedur() ist nicht gerade von der schnellen Sorte, würde hier aber IMMER das selbe Ergebnis liefern. Falls Firebird also dieses Ergebnis für jede Zeile neu aus AndereProzedur() holen würde, dann müsste ich deren Ergebnis "zwischenparken". Also ungefähr so:
Code:
PARKPLATZ = (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));
SELECT * FROM A WHERE NOT A.FELD1 IN PARKPLATZ;
Ich hoffe ihr versteht worauf ich hinaus will. Also eigentlich zwei Fragen: Erstens wie arbeitet Firebird diesen verschachtelten
Query ab und zweitens, wie kann ich ein Unterergebnis in einer Variablen zwischenparken?
Grüße
Cody