3 Tabellen-Join

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

Getting started ... Alles für einen gelungenen Start.
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Hallo an alle hier!

Ich hoffe ich kann hier Hilfe finden und bin für jeden Tipp dankbar! Nun zu meinem Problem:

Ich soll eine Liste per ALV ausgeben (soweit kein Problem), das Problem hierbei ist dass ich 3 Tabellen benötige:

Tabelle1 hat einen Referenzschlüssel den ich brauche um auf Tabelle 3 zuzugreifen, während in Tabelle 2 und 3 Daten stehen die ich ausgeben will.

Hier mal die Beziehungen: Tabelle1-BELNR = Tabelle2-BELNR Tabelle3-VBELN = Tabelle1-AWKEY

Ich bin ehrlich gesagt total überfordert, einen normalen Join bekomme ich hin, aber hier bin ich ratlos...

Ich hoff ich konnte euch mein Problem irgendwie halbwegs verständlich schildern, und bedanke mich im Voraus für die Hilfe!

LG

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


Re: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »

Code: Alles auswählen.

select ... "Die Felder die du brauchst
  from tabelle1 
    inner join tabelle2
      on tabelle1~belnr = tabelle2~belnr
    inner join tabelle3
      on tabelle1~awkey = tabelle1~vbeln
...
Wobei ich aber vermute, dass die Verknüpfung mit Tabelle 3 nicht funktionieren wird, da AWKEY möglicherweise nicht dieselbe Länge wie VBELN haben wird.
In dem Fall musst du die Daten mittels FOR ALL ENTRIES in einer zweiten Query nachladen. Bitte beachte hier ganz besonders die Hinweise was doppelte Einträge in der Suchtabelle für Auswirkungen auf die Performance haben (können).

lg ADT
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: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Danke für die schnelle Antwort,
so hatte ich es schon versucht, nur leider wirft die Tabelle dann immer 0 zurück.

Das Problem mit dem Typ hab ich einfach in einer lokalen Struktur angepasst (hinten werden 4 Ziffern entfernt).
Zuletzt geändert von kaufikauf am 12.08.2014 13:03, insgesamt 2-mal geändert.

Re: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
kaufikauf hat geschrieben:Das Problem mit dem Typ hab ich einfach in einer lokalen Struktur angepasst (hinten werden 4 Ziffern entfernt).
=
kaufikauf hat geschrieben:... nur leider wirft die Tabelle dann immer 0 zurück.
Diese Art der Abfrage funktioniert nicht. Bei JOINs müssen die Felder für den Vergleich zumindest denselben Typ UND dieselbe Länge haben.

Also:

Code: Alles auswählen.

data: lt_vbeln type standard table of vbeln with default key.

select ... "Die Felder die du brauchst
  from tabelle1
    inner join tabelle2
      on tabelle1~belnr = tabelle2~belnr
  into lt_data1
  ...

* Die notwendigen Daten für die zweite Selektion extrahieren
loop at lt_data1 assigning <ls_data1>.
  append <ls_data1>-awkey to lt_vbeln.
endloop.
* Die Selektion verdichten (Performance)
sort lt_vbeln.
delete adjacent duplicates from lt_vbeln. 

select ... "Die Felder die du brauchst
  from tabelle3
  into lt_data2
  for all entries in lt_vbeln
  where tabelle3~vbeln eq lt_vbeln-table_line
  ...
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: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Mir ist eben aufgefallen was du meinst! Der Join kann nicht funktionieren, da die Typen von VBELN und AWKEY unterschiedlich sind!
*Groschen gefallen*

Leider übersteigt dass ganze etwas meinen Horizont,
aber ich versuche grad aus dem Post mit dem Loop schlau zu werden. :mrgreen: (Anfänger-Probleme^^)

Re: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Verdammt... Ich hab was vergessen! Sry!

Statt

Code: Alles auswählen.

select ... "Die Felder die du brauchst
  from tabelle1
    inner join tabelle2
      on tabelle1~belnr = tabelle2~belnr
  into lt_data1
  ...
müsste es

Code: Alles auswählen.

select ... "Die Felder die du brauchst
  from tabelle1
    inner join tabelle2
      on tabelle1~belnr = tabelle2~belnr
  into table lt_data1
  ...
lauten.

EDIT: Gilt auch für den zweiten SELECT (das TABLE fehlt auch da)
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: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Danke für deine Hilfe,

ich will mich echt nicht blöd anstellen, aber ich werde aus dem code nicht so ganz schlau^^

Re: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Die Daten stehen dann in zwei Tabelle (lt_data1 und lt_data2) die im Programm nur noch händisch mit einander "joinen" musst.
z.B.:

Code: Alles auswählen.

loop at lt_data1 assigning <ls_data1>.
  ld_vblen = <ls_data1>-awkey.
  loop at lt_data2 assigning <ls_data2> where vblen = ld_vblen.
* Der Eintrag kommt in beiden Tabellen (mehrmals) vor!
  endloop.
endloop.
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: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Erklärung zu http://www.abapforum.com/forum/viewtopi ... 879#p72264 und http://www.abapforum.com/forum/viewtopi ... 879#p72268
Alles was sich auf der Datenbank joinen lässt (tabelle1 und tabelle2) wird im ersten SELECT abgefragt und in eine interne Tabelle (lt_data1) transferiert.
Dann werden aus dem Ergebnis alle AWKEYs ermittelt und in einen zweite interne Tabelle transferiert (lt_vblen). Diese wird anschließend "verdichtet" (Keine doppelten Einträge)
Im nächsten Schritt werden dann die verbleibenen Daten aus der Datenbank selektiert (tabelle3) und in eine weitere interne Tabelle (lt_data2) eingelesen.
Erklärung zu http://www.abapforum.com/forum/viewtopi ... 879#p72270
Diese beiden Tabellen muss man dann noch händisch im Programm "joinen".

Da ich nicht weiß welche Felder benötigt werden musst du die Struktur von lt_data1 und lt_data2 erst selbst definieren. Deswegen hab ich auch keine Definitionen im meinem Code-Beispiel dafür angelegt. Dasselbe gilt auch für den händischen Join. Je nachdem was dannach mit den Daten passieren soll, können manche Verarbeitungen sinnvoller sein als andere.

lg ADT

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

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: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Ich bin einfach mol so frei und poste mal meinen Code, der teilweise auch funktioniert, nur leider irgendwie die richtigen Daten aber auch falsche Daten auswirft:

Code: Alles auswählen.

SELECT b~belnr b~bukrs b~hkont b~blart b~gjahr b~budat
       c~belnr c~awkey
  INTO CORRESPONDING FIELDS OF TABLE itab2
  FROM ( bsis AS b INNER JOIN bkpf AS c ON b~belnr = c~belnr )
   WHERE b~bukrs IN bukrs
        AND hkont = p_hkont
        AND b~blart = p_blart
        AND b~gjahr IN gjahr
        AND b~budat IN budat.

IF sy-subrc <> 0.
  MESSAGE s014(/asu/general) WITH text-001.
  EXIT.
ENDIF.

SELECT b~mandt b~bukrs b~xblnr b~hkont b~gjahr b~blart b~budat b~bldat b~dmbtr b~belnr
       c~mandt c~vbelv c~matnr c~rfmng c~meins c~waers c~vbtyp_n c~vbeln
  INTO CORRESPONDING FIELDS OF TABLE itab
  FROM ( bsis AS b
        INNER JOIN vbfa AS c ON b~mandt = c~mandt )
  FOR ALL ENTRIES IN itab2
        WHERE bukrs IN bukrs
        AND hkont = p_hkont
        AND blart = p_blart
        AND vbtyp_n IN vbtyp_n
        AND gjahr IN gjahr
        AND budat IN budat
        AND vbeln = itab2-awkey.

Re: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Habe deine Codes mal ausprobiert und die funktionieren, danke!!!!!

Nur ein Frage hätte ich noch, bei deinem Coding ist es ja so, dass ich jetzt nur aus der Tabelle 3(VBFA) lesen kann.
Ich brauche aber auch noch Daten aus der Tabelle 1 (BSIS). Die Verbindung soll ja die VBELN von VBFA und die AWKEY von BKPF sein.

Re: 3 Tabellen-Join

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
kaufikauf hat geschrieben:Nur ein Frage hätte ich noch, bei deinem Coding ist es ja so, dass ich jetzt nur aus der Tabelle 3(VBFA) lesen kann.
Ich brauche aber auch noch Daten aus der Tabelle 1 (BSIS). Die Verbindung soll ja die VBELN von VBFA und die AWKEY von BKPF sein.
Siehe http://www.abapforum.com/forum/viewtopi ... 879#p72270
Die Daten aus deiner ITAB2 sind ja nicht weg.
Du musst dich halt leider selber drum kümmern, dass die Daten aus den beiden Tabellen in der gewünschten Form bereitstehen.
Wenn du die Daten nur anzeigen möchtest sollte der doppelte LOOP von mir reichen. Wenn du aber eine einzige Tabelle daraus machen willst brauchst du zusätzlich noch eine weitere Struktur mit allen Feldern die du benötigst.

Code: Alles auswählen.

loop at lt_data1 assigning <ls_data1>.
  ld_vblen = <ls_data1>-awkey.
  ...
  loop at lt_data2 assigning <ls_data2>
    where vblen = ld_vblen and mandt = <ls_data1>-mandt and ... "Alles was sonst noch für den richtigen Join benötigt wird.
    append initial line to lt_data3 assigning <ls_data3>.
    move-corresponding <ls_data1> to <ls_data3>.
    move-corresponding <ls_data2> to <ls_data3>.
  endloop.
endloop.
lg ADT

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

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: 3 Tabellen-Join

Beitrag von kaufikauf (ForumUser / 15 / 4 / 0 ) »
Es hat geklappt!

Super ich danke dir für deine Hilfe!!!

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3143
Views
Tabellen Join
von commolus » 08.06.2012 10:54 • Verfasst in ABAP Objects®
12
Antw.
6443
Views
Inner Join über 4 Tabellen
von falk » 02.03.2006 11:26 • Verfasst in ABAP® Core
4
Antw.
22660
Views
Join über 2 Tabellen
von Patrick Emse » 25.01.2006 10:19 • Verfasst in ABAP® Core
2
Antw.
508
Views
Join über mehrere Tabellen
von Bright4.5 » 09.07.2021 10:47 • Verfasst in ABAP® für Anfänger
9
Antw.
5604
Views
Problem mit Join von internen & DB-Tabellen
von debianfan » 10.11.2017 09:10 • 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
vor 23 Stunden von black_adept gelöst 8 / 1728
HR-Entgeltnachweis
Gestern von ChrisB 4 / 2289

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
vor 23 Stunden von black_adept gelöst 8 / 1728
HR-Entgeltnachweis
Gestern von ChrisB 4 / 2289

Unbeantwortete Forenbeiträge

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