Inner Join über 4 Tabellen

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

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

Inner Join über 4 Tabellen

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Allerseits,

ich bin gerade dabei, einen Grossteil meiner verschachtelten Selects durch Joins abzulösen. In einem Test mit den Tabellen MAKT, MARA, MARC brachte dies eine Beschleunigung von Faktor 8.

Jetzt habe ich aber einen Report mit 4 Tabellen und komme einfach nicht weiter. Wo kann denn hier der Fehler liegen?

*--> interne Tabellen
DATA:
BEGIN OF tab OCCURS 10,
matnr LIKE marc-matnr,
vkorg LIKE mvke-vkorg,
werks LIKE marc-werks,
maktx LIKE makt-maktx,
END OF tab,

SELECT a~matnr b~vkorg c~werks d~maktx
INTO CORRESPONDING FIELDS OF TABLE tab

FROM ( mara AS a
INNER JOIN mvke AS b ON a~matnr = b~matnr )
INNER JOIN marc AS c ON a~matnr = c~matnr
INNER JOIN makt AS d ON a~matnr = d~matnr

WHERE a~matnr IN s_matnr
AND a~mtart in s_mtart
AND a~lvorm = ' '
and b~vtweg = '10'
and b~vkorg in s_vkorg
AND c~werks in s_werks
AND c~xmcng = ' '
AND c~lvorm = ' '
and d~spras = 'DE'.

Danke!

Falk

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


Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
Hallo.
Vielleicht brauchst du beim FROM mehr Klammen, damit die JOIN - Schachtelung korrekt ist.

Code: Alles auswählen.

SELECT a~matnr b~vkorg c~werks d~maktx 
INTO CORRESPONDING FIELDS OF TABLE tab 

FROM (( mara AS a 
INNER JOIN mvke AS b ON a~matnr = b~matnr ) 
INNER JOIN marc AS c ON a~matnr = c~matnr )
INNER JOIN makt AS d ON a~matnr = d~matnr 

WHERE a~matnr IN s_matnr 
AND a~mtart in s_mtart 
AND a~lvorm = ' ' 
and b~vtweg = '10' 
and b~vkorg in s_vkorg 
AND c~werks in s_werks 
AND c~xmcng = ' ' 
AND c~lvorm = ' ' 
and d~spras = 'DE'. 
oder so ähnlich :?

mdf Andi
Hauptsoch: HAUPTSOCH!

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Andi,

das wars leider noch nicht. Selbst mit 3 Klammern bleibt es beim SY-SUBRC 4. Es muss also einen anderen Grund fürs Scheitern geben...

Falk

Beitrag von Charadin (Specialist / 148 / 0 / 0 ) »
Hallo falk,

bist Du Dir sicher, dass deine WHERE-Bedingungen auch mind. einen Treffer zurückgeben? Vor allem die Abfragen auf = ' ' sind kritisch, was, wenn das Feld initial ist, dann würde die Abfrage auf ' ' schon keinen Treffer bringen... versuch's mal mit ''...
Gruß,
Charadin

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Tach.

Probier mal, eine Tabelle wegzulassen (z.B. MVKE) und siehr Dir das Ergebnis an (sofern Daten zurück kommen). Evtl. kannst Du so eingrenzen, wo der Fehler liegt.

Etwas OT:
beim FROM mehr Klammen, damit die JOIN - Schachtelung korrekt ist.
IMHO werden die Klammern sowieso von der DB-Schnittstelle oder spätestens vom DB-Optimizer wegoptimiert.

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Allerseits,

danke für die schnelle Hilfe.
Beim Weglassen (und späteren Zufügen) der Tabelle MVKE sah ich, das mein Testbeispiel nicht korrekt war. Sowas kommt von sowas.

Warum setzt man denn dann diese Klammern?

Danke!

Falk

Beitrag von ewx (Top Expert / 4843 / 310 / 638 ) »
Hi Falk,

was für einen Fehler hast du denn überhaupt?
Syntaxfehler oder einen logischen?

ich habe in deinem Select mal das "INTO CORRESPONDING... " nach die INNER JOINs gepackt.

Noch am Rande: MAKT-SPRAS ist übrigens nur einstellig! DE für Deutsch und EN für Englisch funktionieren, aber mit DA für Dänisch wirst du den deutschen Eintrag bekommen (Das wäre nämlich "K").

Gruß,
Enno.

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo zusammen,

habe das Teil bei uns ausprobiert und es funktioniert einwandfrei. Die Klammern benötigt man definitiv nicht.
Ich würde - ähnlich wie Charadin bereits gesagt hat - alle Selektionsbedingungen entfernen und dann eine nach der anderen wieder aktivieren.
Mir persönlich kömmt Sprache 'DE' etwas ungewöhnlich vor. Denn bei uns (46C) ist der Sprachenschlüssel in der DB nur einstellig ('D') abgelegt.

mfg dele

Beitrag von Namp (ForumUser / 12 / 0 / 1 ) »
Kann mich meine Vorredner nur anschließen.
Habe es ebenfalls ausprobiert.

1. Die Klammern weglassen. Die sind unnötig.
2. Die Where Ausdrücke nacheinander durchprobieren

ansonsten müsste alles funktionieren.

Noch viel Erfolg dabei!

Folgende Benutzer bedankten sich beim Autor Namp für den Beitrag:
falk


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Ich will nur kurz was zu dem Sprachenschlüssel sagen:
Der ist in allen Systemen nur EIN Zeichen.
Aber man kann 2 angeben, da SAP da irgend eine interne Umwandlung vorniehmt.

Beitrag von ewx (Top Expert / 4843 / 310 / 638 ) »
DeathGuardian hat geschrieben: Aber man kann 2 angeben, da SAP da irgend eine interne Umwandlung vornimmt.
Stimmt: SAP nimmt das erste Zeichen aus dem String.
Enno

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Allerseits,

heute sah ich mal wieder deutlichst, warum ich Mitglied dieses Forums wurde. So schnell kompetente Hilfe zu finden, ist schon sehr beeindruckend.

Ich hatte bei der Wahl meines Beispiels nicht das glücklichste Händchen (einfach übersehen, das es für die VKORG nicht angelegt war).

Wie auch immer, so erfuhr ich noch, das die Klammern bei Joins nicht benötigt werden und das Sprachschlüssel nur aus einem Zeichen bestehen.

Danke!

Falk

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
@Sprachschluessel:
ewx hat geschrieben:
DeathGuardian hat geschrieben: Aber man kann 2 angeben, da SAP da irgend eine interne Umwandlung vornimmt.
Stimmt: SAP nimmt das erste Zeichen aus dem String.
Enno
:lol: ja, das stimmt in diesem Fall.

Ansonsten:
Bei der Eingabe eines Sprachschlüssels zieht die Konvertierungsroutine ISOLA, die ueber die Tabelle T002 den einstelligen (SAP-) Sprachschluessel in den zweistelligen ISO-Sprachschluessel vornimmt und umgekehrt.

Gruss,
Haubi

Folgende Benutzer bedankten sich beim Autor Haubi für den Beitrag:
falk

Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3044
Views
Tabellen Join
von commolus » 08.06.2012 10:54 • Verfasst in ABAP Objects®
12
Antw.
6913
Views
3 Tabellen-Join
von kaufikauf » 12.08.2014 08:00 • Verfasst in ABAP® für Anfänger
4
Antw.
22536
Views
Join über 2 Tabellen
von Patrick Emse » 25.01.2006 10:19 • Verfasst in ABAP® Core
9
Antw.
5413
Views
Problem mit Join von internen & DB-Tabellen
von debianfan » 10.11.2017 09:10 • Verfasst in ABAP® für Anfänger
2
Antw.
2335
Views
Join, Tabellen in Klammern angeben
von JohnLocklay » 19.09.2017 16:33 • Verfasst in ABAP® Core

Ü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

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1668
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8270