ich hab nen join kreiert, der obwohl es nur 15 Datensätze als resultat gibt, über die laufzeit (600 sekunden?) geht. Ich verwende eine
- Eigens gestaltete tabelle zvbap_OK mit key(vbeln,posnr) und
- die vbep.
Hier das SELECT:
SELECT e~vbeln e~posnr e~etenr e~edatu e~bmeng e~lmeng e~mbdat
e~wadat a~sflag
INTO (ktab_neu_zvbep-vbeln, ktab_neu_zvbep-posnr, ktab_neu_zvbep-etenr,
ktab_neu_zvbep-edatu, ktab_neu_zvbep-bmeng, ktab_neu_zvbep-lmeng,
ktab_neu_zvbep-mbdat, ktab_neu_zvbep-wadat, ktab_neu_zvbep-sflag )
FROM zvbap_OK AS a JOIN vbep AS e ON a~vbeln = e~vbeln
AND a~posnr = e~posnr
WHERE a~vbeln IN svbeln
AND a~sflag EQ '0' OR a~sflag EQ 'Z' .
Ich schränke in der select-options die svbeln auf '0002540304' ein, es sollten also mit allen positionen etwa 15 DS gelesen werden, und das dauert so lange, bis ich einen laufzeitfehler bekomme.
Lasse ich den join weg (also die vbep), dann hab ich meine 15 DS (ohne den vbep-daten) sofort. Und der JOIN auf die vbep von 15 DS dauert dann so ewigkeiten?!?!
Hab mich dann in der sap-hilfe schlau gemacht: Es werden zuerst die tabellen gejoint (zvbap_OK, vbep), und dann erst die where klausel bearbeitet. Ich nehme an, dass das so lange dauert. zvbap*vbep:450.000*5.000.000
Ich kann aber meine "where-klausel" nicht in die join-bedingung einbringen (e~vbeln IN svbeln in der ON-bedingung denke ich wär die lösung), da das mit open-sql nicht funktioniert.
Du hast da folgendes stehen:
"AND a~sflag EQ '0' OR a~sflag EQ 'Z' ."
Mach daraus mal "AND ( a~sflag EQ '0' OR a~sflag EQ 'Z' ) ."
Der Grund:
AND zieht stärker wo OR,
sprich dein "a~vbeln IN svbeln" bezog sich nur zum "a~sflag EQ '0' " aber das "a~sflag EQ 'Z' " stand alleine und deshalb hast du mehr als nur 15Zeilen selektiert.
Als kleiner Tip:
In der Mathematik heisst es Punkt vor Strich.
In der Informatik heisst es AND vor OR .
Ja habs entdeckt, wie ich das select gerade umschreiben wollte. ursprünglich war die bedingung der select-option: svbeln nicht inkludiert - > da waren dann noch keine klammern notwendig.... dummer fehler,