ich habe folgende Problemstellung:
Und zwar muss ich Daten aus 2 sehr großen Tabellen auslesen, heißt, es sollte so performant wie möglich gestaltet sein.
Dabei nun folgende Herausforderung:
Erster Select aus Tabelle DBTAB_A mit ein paar Bedingungen. Ausgelesen werden mehrere Felder, darunter auch Feld BELNR. Dieser Feldinhalt kann in der Ergebnismenge nun doppelt oder dreifach rauskommen. Also z.B. ergibt mein Select 1 Mio. Ergebnisse, aber nur 400.000 verschiedene Werte in BELNR.
Der zweite Select erfolgt zu einem späteren Zeitpunkt aus Tabelle DBTAB_B mit Schlüsselfeld = BELNR.
Da zwischen den beiden Selects noch allerhand weitere Prüfungen etc. durchlaufen werden, wäre es vermutlich am sinnvollsten, diese Mehrfacheinträge gar nicht erst zu selektieren. Also wenn ein Eintrag zu BELNR = x gefunden wurde, dann alle weiteren Einträge mit BELNR = x ignorieren.
Hat jemand einen Tipp, wie ich das bestmöglich umgesetzt bekomme?
Danke für die ausführliche Antwort.
Das hat aber so nicht funktioniert, weil ich, wie ich schrieb, ja mehrere Felder auslese, und wenn ich dort ein DISTINCT vorsetze, dann bekomme ich eine Zeile pro Kombination dieser Felder. Da sich aber die anderen Felder unterscheiden, nur BELNR eben nicht, funktioniert das nicht. Jedenfalls habe ich es nicht hinbekommen. Falls du anderer Meinung bist, wären ein paar erklärende Worte in einem Anfänger-Forum ganz nett.
Hallo Patrik,
mach es doch einfach: erstell eine dritte sortiere Tabelle ZTAB3 mit nur einem Feld BELNR Type C(..). Beim LOOP über die DBTAB_A füllst Du die ZTAB3 mit dem Befehl COLLECT BELNR die Tabelle. Und so hast eine sortierte Tabelle mit den BELNR‘s, in der jede BELNR nur einmal vorkommt.