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 / 1939 / 257 / 412 ) »
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.
1308
Views
Lesen VBAK/VBAP aus einem IXOS-Archiv
von Gast » 14.02.2006 11:24 • Verfasst in ABAP® Core
0
Antw.
2548
Views
Verwendungskennzeichen ( VBAK-ABRVW )
von Kleenmex » 08.06.2007 08:57 • Verfasst in Sales and Distribution
2
Antw.
1839
Views
Nummer des Verkaufsbelegs in Z-Feld von VBAK
von JoKo » 05.03.2019 14:46 • Verfasst in Sales and Distribution
0
Antw.
2546
Views
SD:BAPI-Erweiterung BAPE_VBAK/BAPE_VBAP (FG VBAK)
von ion » 28.03.2007 15:03 • Verfasst in ABAP® Core
1
Antw.
2154
Views
Displaying VBAK-KTEXT Field on INVOICE smartform
von Gast » 15.02.2005 06:38 • Verfasst in Development Related

Ü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

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 9 Stunden von Bright4.5 1 / 190
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1833
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8436