Join Bedingung

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

Join Bedingung

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Hallo zusammen
Ich möchte eine Join-Bedingung machen zwischen der Tabelle Mara und Eord
Mein Problem ist, dass nicht alle Materialien in der Eord-Tabelle erfasst sind sondern nur die, die im Orderbuch gepflegt sind.
Wenn ich aber nun ein Material eingebe das nicht in der EORD-Tabelle ist, soll es trotzdem das Material augeben, aber alle EORD-Felder leer lassen

Code: Alles auswählen.

FORM read_data.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE itab01
        FROM mara
    JOIN  makt
      ON  makt~matnr = mara~matnr
     AND  makt~spras = s_spras

    JOIN  marc
      ON  marc~matnr =  mara~matnr
     AND  marc~werks =  s_werks

    JOIN  mbew
      ON  mbew~matnr = mara~matnr

    WHERE  mara~matnr IN s_matnr
     AND   mara~mtart IN s_mtart
     AND   mara~matkl IN s_matkl
     AND   mara~mstae IN s_mstae
     AND   marc~mmsta IN s_mmsta
     AND   marc~dispo IN s_dispo
     AND   marc~ekgrp IN s_ekgrp
     AND   marc~ncost IN s_ncost
     AND   marc~beskz IN s_beskz
     AND   mbew~vprsv IN s_vprsv
     AND   mbew~hrkft IN s_hrkft.


ENDFORM.

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


Re: Join Bedingung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Das Stichwort heißt "left outer join"
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: Join Bedingung

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
a-dead-trousers hat geschrieben:Das Stichwort heißt "left outer join"
Oder gar kein Join ueber die EORD, sondern vielleicht ein Nachlesen mit FOR ALL ENTRIES.

Re: Join Bedingung

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Left outer join ist super, danke
Aber nun wird das Feld Mara~Matnr nur angezeigt wenn ein Eintrag in der EORD Tabelle vorhanden ist

Code: Alles auswählen.

    LEFT OUTER JOIN eord
      ON eord~matnr = marc~matnr
Kompletter Code:

Code: Alles auswählen.

FORM read_data.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE itab01
        FROM mara
    JOIN  makt
      ON  makt~matnr = mara~matnr
     AND  makt~spras = s_spras

    JOIN  marc
      ON  marc~matnr =  mara~matnr
     AND  marc~werks =  s_werks

    JOIN  mbew
      ON  mbew~matnr = mara~matnr

    JOIN  mvke
      ON  mvke~matnr = mara~matnr

    LEFT OUTER JOIN eord
      ON eord~matnr = marc~matnr


    WHERE  mara~matnr IN s_matnr
     AND   mara~mtart IN s_mtart
     AND   mara~matkl IN s_matkl
     AND   mara~mstae IN s_mstae
     AND   marc~mmsta IN s_mmsta
     AND   marc~dispo IN s_dispo
     AND   marc~ekgrp IN s_ekgrp
     AND   marc~ncost IN s_ncost
     AND   marc~beskz IN s_beskz
     AND   mbew~vprsv IN s_vprsv
     AND   mbew~hrkft IN s_hrkft.


ENDFORM.                    "read_data

Re: Join Bedingung

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
christof hat geschrieben:Aber nun wird das Feld Mara~Matnr nur angezeigt wenn ein Eintrag in der EORD Tabelle vorhanden ist
Das Problem ist das INTO CORRESPONDING FIELDS OF TABLE und der SELECT *. Durch den SELECT * ist die Matnr mehrfach in der Ergbnistabelle des Selects (MARA~MATNR, MARC~MATNR, MBEW~MATNR,.....EORD~MATNR), da INTO CORRESPONDING geht dabei aber nur über die Namensgleichheit unabhängig ob das Feld Initial ist. Das Feld MATNR wird also mehrfach in die ITAB übertragen, wobei die letzte Übertragung EORD~MATNR einen initialien Wert übergibt.

Gibt bei SELECT * die wirklich benötigten Felder an. Wenn du die Felder in der Reihenfolge der ITAB angibst, kannst du dir das INTO CORRESPONDING auch sparen, dann werden die Daten Satzweise (also ohne Feldzuweisung) in die ITAB geschrieben.

Code: Alles auswählen.

SELECT mara~matnr
       makt~maktx
       ....
       EORD~feld1
INTO TABLE itab01
FROM.....
Gruß Hendrik

Re: Join Bedingung

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Meinst du so?

Code: Alles auswählen.

FORM read_data.

  
 SELECT
        mara~matnr
        makt~maktx
        makt~spras
        marc~basmg
        mara~meins
       ....
       ....

    INTO TABLE itab01

        FROM mara


    WHERE  mara~matnr IN s_matnr
     AND   mara~mtart IN s_mtart
     AND   mara~matkl IN s_matkl
     AND   mara~mstae IN s_mstae
     AND   marc~mmsta IN s_mmsta
     AND   marc~dispo IN s_dispo
     AND   marc~ekgrp IN s_ekgrp
     AND   marc~ncost IN s_ncost
     AND   marc~beskz IN s_beskz
     AND   mbew~vprsv IN s_vprsv
     AND   mbew~hrkft IN s_hrkft.

Re: Join Bedingung

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
christof hat geschrieben:Meinst du so?
Jupp, scheint ja auch zu funktionieren ;-)
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1709
Views
Join Bedingung
von Charlie » 13.05.2004 15:51 • Verfasst in ABAP® Core
3
Antw.
1976
Views
zusammengesetzte Where-Bedingung bei inner join
von grossmic » 28.10.2009 11:05 • Verfasst in ABAP® für Anfänger
2
Antw.
875
Views
Komplizierte Join Bedingung
von Nordlicht » 20.08.2014 15:10 • Verfasst in ABAP® für Anfänger
3
Antw.
1228
Views
Select statement inner Join mit Bedingung aus Teilstring
von Romaniac » 21.08.2021 21:54 • Verfasst in ABAP® Core
1
Antw.
751
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141