select join hilfe

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

select join hilfe

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Hallo,

Ich hoffe mir kann jemand dabei helfen
Bei folgender ausgabe erhalte ich keinen Wert und sy-subrc = 4:

Code: Alles auswählen.

    select single kpf~budat
      into order_be_issue
      from ( ( mkpf as kpf inner join mseg as seg
               on kpf~mblnr = seg~mblnr and kpf~mjahr = seg~mjahr )
                           inner join vbfa as fa
               on seg~mblnr = fa~vbeln  and seg~zeile = fa~posnn )
     where fa~vbelv = order_vbeln
       and fa~posnv = tmp_order_posnr
       and fa~vbtyp_n = 'R'
       and seg~bwart = '601'
       and seg~matnr = tmp_order_matnr
       and seg~kdauf = order_vbeln
       and seg~kdpos = tmp_order_posnr.
Und wenn ich das verschachtele dann bekomm ich einen wert:

Code: Alles auswählen.


    data: temp_vbeln type vbfa-vbeln,
          temp_posnn type vbfa-posnn.
    select single vbeln posnn
     into (temp_vbeln,temp_posnn)
     from vbfa
    where vbelv = order_vbeln
      and posnv = tmp_order_posnr
      and vbtyp_n = 'R'.
    if sy-subrc = 0.
      select single kpf~budat
        into order_be_issue
        from mkpf as kpf inner join mseg as seg
             on kpf~mblnr = seg~mblnr and
                kpf~mjahr = seg~mjahr
       where seg~mblnr = temp_vbeln
         and seg~zeile = temp_posnn
         and seg~bwart = '601'
         and seg~matnr = tmp_order_matnr
         and seg~kdauf = order_vbeln
         and seg~kdpos = tmp_order_posnr.
    endif.
Ist es eigendlich egal wie ich die From-Klausel bilde, sprich z.B. erst vbfa inner join mseg und dann mkpf... Oder muss man sich da an eine Reinfolge halten?



Danke & Gruß
Dimes

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


Re: select join hilfe

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
dimes hat geschrieben:Hallo,

Ich hoffe mir kann jemand dabei helfen
Bei folgender ausgabe erhalte ich keinen Wert und sy-subrc = 4:

Code: Alles auswählen.

    select single kpf~budat
      into order_be_issue
      from ( ( mkpf as kpf inner join mseg as seg
               on kpf~mblnr = seg~mblnr and kpf~mjahr = seg~mjahr )
                           inner join vbfa as fa
               on seg~mblnr = fa~vbeln  and seg~zeile = fa~posnn )
     where fa~vbelv = order_vbeln
       and fa~posnv = tmp_order_posnr
       and fa~vbtyp_n = 'R'
       and seg~bwart = '601'
       and seg~matnr = tmp_order_matnr
       and seg~kdauf = order_vbeln
       and seg~kdpos = tmp_order_posnr.
Und wenn ich das verschachtele dann bekomm ich einen wert:

Code: Alles auswählen.


    data: temp_vbeln type vbfa-vbeln,
          temp_posnn type vbfa-posnn.
    select single vbeln posnn
     into (temp_vbeln,temp_posnn)
     from vbfa
    where vbelv = order_vbeln
      and posnv = tmp_order_posnr
      and vbtyp_n = 'R'.
    if sy-subrc = 0.
      select single kpf~budat
        into order_be_issue
        from mkpf as kpf inner join mseg as seg
             on kpf~mblnr = seg~mblnr and
                kpf~mjahr = seg~mjahr
       where seg~mblnr = temp_vbeln
         and seg~zeile = temp_posnn
         and seg~bwart = '601'
         and seg~matnr = tmp_order_matnr
         and seg~kdauf = order_vbeln
         and seg~kdpos = tmp_order_posnr.
    endif.
Ist es eigendlich egal wie ich die From-Klausel bilde, sprich z.B. erst vbfa inner join mseg und dann mkpf... Oder muss man sich da an eine Reinfolge halten?



Danke & Gruß
Dimes
Hallo Dimes,

wie ich dies sehe, sind deine beiden Codes
unterschiedlich. Im zweiten, wenn du Werte
bekommst, liest du ja erst, wenn in der
Belegflusstabelle VBFA etwas gefunden wurde.

BWART 601 ist Warenausgang. Wenn in deinem
ersten Beispiel noch kein WA stattgefunden hat,
ist noch kein Eintrag in der Belegflusstabelle
und du bekommst kein Ergebniss.

Bei einem Inner Join muss in jeder Tabelle
ein Eintrag vorhanden sein, damit du ein
Ergebniss erhälst.

gruss

gerhard

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
hi,
wie ich dies sehe, sind deine beiden Codes
unterschiedlich. Im zweiten, wenn du Werte
bekommst, liest du ja erst, wenn in der
Belegflusstabelle VBFA etwas gefunden wurde.
Ich finde nicht das die beiden Codes unterschiedlich sind. Denn im ersten code lese ich ja auch nur dann wenn ich in der vbfa werte gefunden habe.Wie du schon gesagt hast:
Bei einem Inner Join muss in jeder Tabelle
ein Eintrag vorhanden sein, damit du ein
Ergebniss erhälst.
Bei meinem inner join muss ich das irgendwie so verstehen:

sucht er anhand der where-klausel die werte in der vbfa, wenn er da nichts gefunden hat dann braucht er auch nicht in den anderen tabellen zu suchen, wenn er da jatzt aber was gefunden hat sucht er in den beiden anderen Tabellen weiter (auch anhand der where-klausel)...

das ist doch im Prinzip das gleiche was ich auch im 2ten coding gemacht habe! oder nicht?

Weshalb bekomme ich dann nur im 2 code ein ergebniss???

Beitrag von GERDLA (Specialist / 116 / 0 / 0 ) »
dimes hat geschrieben:hi,


Ich finde nicht das die beiden Codes unterschiedlich sind. Denn im ersten code lese ich ja auch nur dann wenn ich in der vbfa werte gefunden habe.Wie du schon gesagt hast:


Bei meinem inner join muss ich das irgendwie so verstehen:

sucht er anhand der where-klausel die werte in der vbfa, wenn er da nichts gefunden hat dann braucht er auch nicht in den anderen tabellen zu suchen, wenn er da jatzt aber was gefunden hat sucht er in den beiden anderen Tabellen weiter (auch anhand der where-klausel)...

das ist doch im Prinzip das gleiche was ich auch im 2ten coding gemacht habe! oder nicht?

Weshalb bekomme ich dann nur im 2 code ein ergebniss???
Hi Dimes,

in deinem ersten Code machst du einen Join über alle (drei) Tabellen. Hier findest Du nur Werte, wenn auch alle drei Tabellen einen Eintrag über den key haben.

In deinem zweiten Code liest du erst die vbfa und nur dann, wenn du einen Eintrag gefunden hast, machst du einen Join auf dann zwei ! Tabellen.
Dies ist ein unterschiedlicher Code (von der Logik).

Allerdings solltest Du auch im ersten Coding zumindest die Einträge bekommen, die auch im zweiten Coding auftauchen, wobei ich nicht sicher bin, ob deine On-Bedingungen im ersten Code zur VBFA auch richtig sind Beispiel (on seg~mblnr = fa~vbeln).
gruss

gerhard

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Ja ok.

Ich meine aber auch das ich die gleichen Einträge bei beiden Codings bekommen muss. Nur ist das nicht der Fall.
wobei ich nicht sicher bin, ob deine On-Bedingungen im ersten Code zur VBFA auch richtig sind Beispiel (on seg~mblnr = fa~vbeln).
mach ich ja im prenziep im 2 coding auch so.
into (temp_vbeln,temp_posnn)
...
where seg~mblnr = temp_vbeln
and seg~zeile = temp_posnn
...
und da bekomme ich meine werte!

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

ich glaube, es könnte etwas damit zu tun haben, dass die Felder MSEG-ZEILE [N(04)] und VBFA-POSNN [N(06)]unterschiedlich lang sind. Es sieht so aus, als ob das in der ON-Bedingung anders behandelt wird als in der Where-Bedingung.
Wir haben ähnliche Probleme auch schon gehabt und das dann immer ohne Join gemacht.

mfg dele

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1517
Views
Hilfe bei SQL Join
von moo_jo » 16.11.2018 14:51 • Verfasst in ABAP® für Anfänger
23
Antw.
4967
Views
Hilfe bei SQL Join
von moo_jo » 16.11.2018 14:46 • Verfasst in ABAP® für Anfänger
4
Antw.
2747
Views
Brauche Hilfe zu Update nach Join in ITAB
von laola » 23.07.2008 16:42 • Verfasst in ABAP® für Anfänger
24
Antw.
8263
Views
Select mit join
von Spookykid » 31.03.2011 12:28 • Verfasst in ABAP® für Anfänger
21
Antw.
10773
Views
Select all bei inner join
von Bright4.5 » 05.09.2018 09:19 • 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

Daten an Tabelle binden
vor 6 Stunden von Bright4.5 1 / 137
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1778
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8380