Tabellen Join

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Tabellen Join

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Servus zusammen,

ich will 2 Felder aus der Tabelle DRAW in meine interne Tabelle gt_doc_files zu den bereits vorhandenen Feldern dazu hängen. (Sprich die gt_doc_files ist bereits zum Teil befüllt ich würde nur mehr die 2 Felder aus der DRAW mit den Richtigen Nummern benötigen.
Mein Ansatz ist dieser

Code: Alles auswählen.

 select  draw~dokst draw~loedk
      appending table gt_doc_files
       from draw join dms_doc_files
      on draw~dokar = gt_doc_files~dokar
       AND draw~dokvr = dms_doc_files~dokvr
  AND draw~doktl = dms_doc_files~doktl
  AND draw~dappl = dms_doc_files~dappl.
Leider geht das nicht so wie ich das mir das Vorgestellt habe.

Wo liegt mein Denkfehler?


Danke

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


Re: Tabellen Join

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hi,

mit einem Join in eine interne Tabelle kannst du keine Datensätze aktualisieren, die bereits in der Tabelle vorhanden sind. Der Join würde der Tabelle nur neue Einträge hinzufügen können.
ich will 2 Felder aus der Tabelle DRAW in meine interne Tabelle gt_doc_files zu den bereits vorhandenen Feldern dazu hängen.
um das zu erreichen müsstest du wie folgt vorgehen:

a) bereits beim ersten Füllen der gt_doc_files mit dem JOIN auf die DRAW arbeiten

oder

b) ein LOOP über alle Einträge in der gt_doc_files. Zu jedem der Datensätze in gt_doc_files die passenden Werte aus der DRAW lesen und die Felder in gt_doc_files aktualisieren.
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Tabellen Join

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Servus Alex.

Wie könnte so ein Loop aussehen?

Hast du ein Bsp.?

Danke

Re: Tabellen Join

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hier mal ein (sinnfreies) Beispiel...

Code: Alles auswählen.

 TYPES: BEGIN OF t_mara,
      matnr LIKE mara-matnr,
      maktx LIKE makt-maktx,
    END OF t_mara.

    DATA: gt_mara TYPE HASHED TABLE OF t_mara WITH UNIQUE KEY matnr.
    FIELD-SYMBOLS: <mara> TYPE t_mara.

    TYPES: BEGIN OF t_makt,
      matnr LIKE mara-matnr,
      maktx LIKE makt-maktx,
    END OF t_makt.

    DATA: gt_makt TYPE HASHED TABLE OF t_makt WITH UNIQUE KEY matnr,
          wa_makt LIKE LINE OF gt_makt.

"Materialnummern. Hier soll später der Text hinzugelesen werden
    SELECT matnr FROM mara APPENDING TABLE gt_mara UP TO 100 ROWS.

    CHECK gt_mara IS NOT INITIAL.

"Zwischenspeicherung Materialtexte in einer internen Tabelle
"somit müssen wir in dem LOOP nicht mehr auf die MAKT zugreifen
    SELECT matnr maktx FROM makt
      APPENDING TABLE gt_makt
      FOR ALL ENTRIES IN gt_mara
      WHERE matnr = gt_mara-matnr
        AND spras = sy-langu.

"für jeden eintrag in gt_mara die Texte aus der zwischengespeicherten Tabelle nachlesen
    LOOP AT gt_mara ASSIGNING <mara>.

      READ TABLE gt_makt INTO wa_makt
        WITH TABLE KEY matnr = <mara>-matnr.
     
      IF sy-subrc = 0.
        "Verwendung eines FIELD-SYMBOLS erspart einem das MODIFY, die Zuweisung kann direkt ausgführt werden
        <mara>-maktx = wa_makt-maktx.
      ENDIF.

    ENDLOOP.
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Tabellen Join

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Hi!

Sofern man Basis 6.0 oder höher verwendet sollte dieser Ansatz auch funktionieren

Code: Alles auswählen.

select draw~dokar draw~doknr draw~dokvr draw~doktl draw~dokst draw~loedk draw~dappl
  into corresponding fields of table gt_doc_files
  from draw
  for all entries in gt_doc_files
  where draw~dokar = gt_doc_files~dokar
    AND draw~doknr = gt_doc_files~doknr
    AND draw~dokvr = gt_doc_files~dokvr
    AND draw~doktl = gt_doc_files~doktl.
Damit werden alle Datensätze aus der internen Tabelle mit den zugehörigen Informationen aus der Datenbank "ersetzt".
Seit 6.0 ist es glaub ich bei SELECT FOR ALL ENTRIES möglich die internen Tabelle sowohl beim FOR ALL ENTRIES als auch beim INTO anzugeben.
Möglich, dass es auch erst ab Basis 7.0 möglich ist.

Das Beispiel kann man dann auch mit JOINS usw. erweitern.

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

Seite 1 von 1

Vergleichbare Themen

12
Antw.
6896
Views
3 Tabellen-Join
von kaufikauf » 12.08.2014 08:00 • Verfasst in ABAP® für Anfänger
12
Antw.
6309
Views
Inner Join über 4 Tabellen
von falk » 02.03.2006 11:26 • Verfasst in ABAP® Core
4
Antw.
22534
Views
Join über 2 Tabellen
von Patrick Emse » 25.01.2006 10:19 • Verfasst in ABAP® Core
9
Antw.
5411
Views
Problem mit Join von internen & DB-Tabellen
von debianfan » 10.11.2017 09:10 • Verfasst in ABAP® für Anfänger
2
Antw.
2333
Views
Join, Tabellen in Klammern angeben
von JohnLocklay » 19.09.2017 16:33 • Verfasst in ABAP® Core

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 / 1517
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8130