Optimaler Join zwischen VBAK und VBAP?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

Optimaler Join zwischen VBAK und VBAP?

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Moin,

Ich versuche gerade diese Abfrage mit folgendem Join zu optimieren aber will leider nicht ganz klappen.
Ich habe right outer join gewählt da es von beiden Tabellen Spalten für Eingrenzung verwendet werden.
Ich würde mich gerne über Verbesserungsvorschläge freuen.
Danke!

Typisierung von lt_sdpos:

Code: Alles auswählen.

types:
      begin of ty_sdpos_s,
        vbeln type vbak-vbeln,
        posnr type vbap-posnr,
        objnr type vbap-objnr,
        matnr type vbap-matnr,
        prctr type vbap-prctr,
        zz1 type vbap-zz1,
        zz2 type vbap-zz2,
        auart type vbak-auart,
      end of ty_sdpos_s.
    types:
    ty_sdpos_t type hashed table of ty_sdpos_s with unique key vbeln posnr
                                               with unique hashed key o components objnr.

Code: Alles auswählen.

select vbak~vbeln,
           vbap~posnr,
           vbap~objnr,
           vbap~matnr,
           vbap~prctr,
           vbap~zz1,
           vbap~zz2
      from vbak
      right outer join vbap on vbak~vbeln = vbap~vbeln
      where vbak~vbeln in @gs_sel_param-r_vbeln[] and
            vbak~auart in @gs_sel_param-r_auart[] and
            vbak~vkorg = @gs_sel_param-vkorg and
            vbak~vtweg = @gs_sel_param-vtweg and
            vbak~spart in @gs_sel_param-r_spart[] and
            vbak~erdat in @gs_sel_param-r_erdat[] and
            vbap~pstyv in  @gs_sel_param-r_pstyv[] and
            vbap~abgru = ''
      order by vbap~objnr
      into table @lt_sdpos

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Optimaler Join zwischen VBAK und VBAP?

Beitrag von BecomingAnAbapGuru (ForumUser / 83 / 31 / 3 ) »
sap_enthusiast hat geschrieben:
10.07.2023 18:20
Moin,

Ich versuche gerade diese Abfrage mit folgendem Join zu optimieren aber will leider nicht ganz klappen.
Ich habe right outer join gewählt da es von beiden Tabellen Spalten für Eingrenzung verwendet werden.
Ich würde mich gerne über Verbesserungsvorschläge freuen.
Danke!

Typisierung von lt_sdpos:

Code: Alles auswählen.

types:
      begin of ty_sdpos_s,
        vbeln type vbak-vbeln,
        posnr type vbap-posnr,
        objnr type vbap-objnr,
        matnr type vbap-matnr,
        prctr type vbap-prctr,
        zz1 type vbap-zz1,
        zz2 type vbap-zz2,
        auart type vbak-auart,
      end of ty_sdpos_s.
    types:
    ty_sdpos_t type hashed table of ty_sdpos_s with unique key vbeln posnr
                                               with unique hashed key o components objnr.

Code: Alles auswählen.

select vbak~vbeln,
           vbap~posnr,
           vbap~objnr,
           vbap~matnr,
           vbap~prctr,
           vbap~zz1,
           vbap~zz2
      from vbak
      right outer join vbap on vbak~vbeln = vbap~vbeln
      where vbak~vbeln in @gs_sel_param-r_vbeln[] and
            vbak~auart in @gs_sel_param-r_auart[] and
            vbak~vkorg = @gs_sel_param-vkorg and
            vbak~vtweg = @gs_sel_param-vtweg and
            vbak~spart in @gs_sel_param-r_spart[] and
            vbak~erdat in @gs_sel_param-r_erdat[] and
            vbap~pstyv in  @gs_sel_param-r_pstyv[] and
            vbap~abgru = ''
      order by vbap~objnr
      into table @lt_sdpos


Ich versteh nicht wieso du dafür ein right outer join machst. Klappt doch mit einem left outer auch

Re: Optimaler Join zwischen VBAK und VBAP?

Beitrag von DeathAndPain (Top Expert / 1964 / 261 / 415 ) »
Und ich verstehe nicht, weshalb überhaupt ein outer join. Welche Positionen in der VBAP soll es denn geben, zu denen es keinen VBAK-Belegkopf gibt? Im übrigen selektierst Du ja gar keine Spalten aus der VBAK (außer der Belegnummer, aber die könntest Du auch der VBAP entnehmen).

Letztlich führst Du Deine ganzen VBAK-bezogenen Selektionskriterien ad absurdum, wenn Du einen outer join durchführst, denn damit sagst Du ja, dass Du alle VBAP-Positionen haben möchtest, auch wenn deren Belege Deine VBAK-Selektionskriterien nicht erfüllen. Das würde Sinn ergeben, wenn Du auch Spalten aus der VBAK mitlesen würdest, auf die Du verzichten könntest, wenn die VBAK keine entsprechende Zeile hat. Aber zum einen wird es diesen Fall nie geben, wenn Du kein Konsistenzproblem auf Deiner Datenbank hast, weil die VBAK die Kopftabelle zur VBAP ist und Du daher nie Positionen finden solltest, zu deren Beleg es keinen Kopfeintrag in der VBAK gibt. Zum anderen liest Du eh nur Spalten aus der VBAP.

So, wie Dein SELECT sich liest, ist Deine Absicht, Positionen zu lesen, aber nur von Belegen, deren Kopfzeile in der VBAK Deine Selektionsbedingungen erfüllt. Und das ist der klassische Fall für einen gewöhnlichen INNER JOIN (wobei man das INNER i.d.R. weglässt, eben weil es der Normalfall ist).

Also ist der RIGHT OUTER JOIN hier nicht nur unnötig, sondern sogar falsch. Ein LEFT OUTER JOIN wäre hier genauso falsch.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
sap_enthusiast


Re: Optimaler Join zwischen VBAK und VBAP?

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
Ist zwar technisch unwichtig, ich würde die Ergebnisfelder nach VBAK, VBAP anordnen

Folgende Benutzer bedankten sich beim Autor deejey für den Beitrag:
sap_enthusiast


Seite 1 von 1

Vergleichbare Themen

0
Antw.
1357
Views
Lesen VBAK/VBAP aus einem IXOS-Archiv
von Gast » 14.02.2006 11:24 • Verfasst in ABAP® Core
0
Antw.
2634
Views
Verwendungskennzeichen ( VBAK-ABRVW )
von Kleenmex » 08.06.2007 08:57 • Verfasst in Sales and Distribution
2
Antw.
1926
Views
Nummer des Verkaufsbelegs in Z-Feld von VBAK
von JoKo » 05.03.2019 14:46 • Verfasst in Sales and Distribution
0
Antw.
2611
Views
SD:BAPI-Erweiterung BAPE_VBAK/BAPE_VBAP (FG VBAK)
von ion » 28.03.2007 15:03 • Verfasst in ABAP® Core
4
Antw.
886
Views
Konditionswert in VBAP übergeben
von LD57 » 30.07.2020 11:20 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1776
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1776
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2319

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 350
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 946
MS-Word als Editor
letzen Monat von tekko 1 / 4456