OPEN SQL JOIN / Eine Tabelle mit >1 Tabellen verbinden

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

OPEN SQL JOIN / Eine Tabelle mit >1 Tabellen verbinden

Beitrag von Michael71 (ForumUser / 17 / 5 / 0 ) »
Hallo zusammen,

ich bin gerade dabei mich im Rahmen von Performanceoptimierungen mit OPEN SQL JOINs zu beschäftigen.

Der folgende Programmausschnitt funktioniert auch einwandfrei.
...
DATA: tb_eigen TYPE SORTED TABLE OF eigen WITH UNIQUE KEY mandt carrid
connid fldate bookid.
FIELD-SYMBOLS: <eigen> TYPE eigen.
...
* tb_eigen befüllen.
* b = sbook, f = sflight, c = scarr
SELECT b~mandt b~carrid b~connid b~fldate b~bookid b~customid f~planetype c~carrname
FROM ( ( sbook AS b INNER JOIN sflight AS f ON
b~carrid = f~carrid AND
b~connid = f~connid AND
b~fldate = f~fldate )
INNER JOIN scarr AS c ON
f~carrid = c~carrid )
INTO CORRESPONDING FIELDS OF TABLE tb_eigen
WHERE b~carrid IN carr.

* Kundenname ergänzen
LOOP AT tb_eigen ASSIGNING <eigen>.
SELECT SINGLE name FROM scustom INTO <eigen>-name
WHERE id = <eigen>-customid.
ENDLOOP.
...

Ich würde nun gerne wissen, ob es auch möglich wäre die Kundennamensergänzung gleich in die vorstehende Select-Anweisung zu integtrieren?

Oder ist dies nicht möglich, da ich ja dann von der Tabelle sbook aus auf die Tabellen sflight und scustom "joinen" müste?

Gibt es eine andere Alternative, die die Performance steigern würde?

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


Re: OPEN SQL JOIN / Eine Tabelle mit >1 Tabellen verbinden

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
hi!

Du musst nicht BEIDE separat joinen

Code: Alles auswählen.

SELECT b~mandt b~carrid b~connid b~fldate b~bookid b~customid f~planetype c~carrname d~scustom
FROM sbook AS b 
  INNER JOIN sflight AS f
    ON b~carrid = f~carrid
   AND b~connid = f~connid
   AND b~fldate = f~fldate
  INNER JOIN scarr AS c 
    ON f~carrid = c~carrid
  INNER JOIN scustom AS d 
    ON d~id = b~customid
INTO CORRESPONDING FIELDS OF TABLE tb_eigen
WHERE b~carrid IN carr.
Ich hab mir erlaubt die Ausrichtung anzupassen, damit man besser erkennt wie das mit dem Join funktioniert. Nach jedem JOIN-Befehl wird defniniert welche Felder der gejointen Tabelle mit ALLEN bisherigen verunden werden sollen. Das heißt du hängst immer wieder weitere Tabellen an das Ergebnis an. (Bis du irgendwann den Datenbankpuffer sprengst :P )
Aber Achtung bei INNER JOIN müssen in allen Tabellen Einträge vorhanden sein. Wenn zum Beispiel in SCUSTOM nichts zum Eintrag in der SBOOK vorhanden ist, wird auch nichts ausgegeben. In dem Fall wird ein LEFT (OUTER) JOIN benötigt. Mehr Infos gibts in der Hilfe und im Web zum Thema "SQL und Joins" (Ist jetzt nichts SAP-spezifisches)

Kleiner Hinweis noch zum Thema Performance:
Ein JOIN ist kein Allheilmittel, da die Belastung auf die DB geht die in SAP der Flaschenhals des Systems ist. Es muss wirklich von Fall zu Fall überlegt werden ob man nicht lieber ein paar MB mehr überträgt anstatt die DB umständlich die Daten aussieben zu lassen.

In deinem Fall würde ich nach dem SELECT die IDs mit LOOP AT und APPEND in einer eigenen internen Tabelle sammeln. Danach einmal SORT und DELETE ADJACENT DUPLICATES. Und schließlich mit der Gesamtmenge der IDs ein SELECT FOR ALL ENTRIES.

Ich würde dir sonst noch raten die SAP Schulung BC490 zu besuchen (oder die Unterlagen irgendwo zu besorgen) da erfährt man was man in SAP alles machen kann um Programme zu beschleunigen.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Michael71

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: OPEN SQL JOIN / Eine Tabelle mit >1 Tabellen verbinden

Beitrag von Michael71 (ForumUser / 17 / 5 / 0 ) »
Danke für die schnelle Antwort. :up:

In diesem Zusammenhang habe ich auch schon mit internen Tabelle und Datenbankviews "herumgespielt" und erstaunliche Ergebnisse erzielt, was die Datenbankzugrifszeiten angeht. Das Längste waren 37 Sekunden, das Kürzeste 1,9 Sekunden.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4070
Views
Infoset/Query mit Join verbinden?
von n4426 » 10.03.2011 16:16 • Verfasst in SAP - Allgemeines
7
Antw.
868
Views
Tabellen verbinden
von NLengner » 09.05.2019 10:01 • Verfasst in ABAP® für Anfänger
6
Antw.
2720
Views
Tabellen verbinden
von ferox » 15.02.2006 09:31 • Verfasst in SAP - Allgemeines
9
Antw.
6811
Views
mehrere Tabellen 'verbinden'
von MarkusW » 09.05.2007 14:36 • Verfasst in ABAP® Core
13
Antw.
4859
Views
wie kan man zwei interen tabellen verbinden?
von autohandel7 » 14.07.2014 10:59 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor einer Stunde von black_adept gelöst 23 / 3456
User Exit EXIT_RQCPRM10_001
vor einer Stunde von a-dead-trousers 2 / 143
Trennen Strasse und Hausnummer
vor 7 Stunden von payten 13 / 10452
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1201

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

Dialog-Container mit Toolbar/Status
vor einer Stunde von black_adept gelöst 23 / 3456
User Exit EXIT_RQCPRM10_001
vor einer Stunde von a-dead-trousers 2 / 143
Trennen Strasse und Hausnummer
vor 7 Stunden von payten 13 / 10452
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1201

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2757
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9337