Sub-Queries

Dies ist Teil 7 von 10 der Serie Performance-Workshop

Eine kurze Vorstellung von Sub-Queries und wie sie verwendet werden können.

Sub-Queries kommen nicht sehr häufig zum Einsatz. Man sollte jedoch im Hinterkopf haben, dass es sie gibt, denn einige Aufgaben kann man recht elegant mit ihnen lösen.

Im folgenden Beispiel soll nur dann ein Satz aus Tabelle ztab_b gelesen werden, wenn ein zugehöriger Satz in Tabelle knvv vorhanden ist.

    SELECT SINGLE * FROM knvv
             WHERE kunnr EQ p_kunnr
               AND vkorg EQ p_vkorg
               AND vtweg EQ p_vtweg
               AND spart EQ p_spart
               AND loevm NE 'X'.
    IF sy-subrc EQ 0.
*** Zusatzdaten zum verkaufsbüro/verkäufergruppe   
      SELECT SINGLE * FROM ztab_b
              WHERE vkorg  = p_vkorg
                AND vkbur  = p_vkbur
                AND vkgrp  = p_vkgrp.
      IF sy-subrc EQ 0.
        ... 
      ENDIF.
    ENDIF.

Folgendes Coding ist mindestens doppelt so schnell:

*** Zusatzdaten zum verkaufsbüro/verkäufergruppe   
    SELECT SINGLE * FROM ztab_b
            WHERE vkorg  = p_vkorg
              AND vkbur  = p_vkbur
              AND vkgrp  = p_vkgrp
              AND EXISTS ( SELECT * FROM knvv
                            WHERE kunnr EQ p_kunnr
                              AND vkorg EQ p_vkorg
                              AND vtweg EQ p_vtweg
                              AND spart EQ p_spart
                              AND loevm NE 'X' ).

Wenn Sie sich innerhalb des Subqueries auf den aktuellen Tabelleneintrag beziehen möchten, dann sieht das Coding etwas anders aus:

*** Zusatzdaten zum verkaufsbüro/verkäufergruppe   
    SELECT SINGLE * FROM ztab_b AS b
            WHERE vkorg  = p_vkorg
              AND vkbur  = p_vkbur
              AND vkgrp  = p_vkgrp
              AND EXISTS ( SELECT * FROM knvv
                            WHERE kunnr EQ p_kunnr
                              AND vkorg EQ b~vkorg
                              AND vtweg EQ b~vtweg
                              AND spart EQ b~spart
                              AND loevm NE 'X' ).

 

Enno Wulff
Series Navigation<< SELECT und ORDER BYBearbeitung von internen Tabellen >>