Mysql-ähnlicher Join benötigt!

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

Mysql-ähnlicher Join benötigt!

Beitrag von curlyhairedguitarist (ForumUser / 3 / 0 / 0 ) »
Hallo!

Ich bin neu im Forum und ABAP-Anfänger! Deshalb hoff ich, dass ihr mir helfen könnt.

Folgendes Problem: ich habe ein kleines Report-Prog. geschrieben, das dem Benutzer beim ausführen zwei selection screens zeigen soll. Einen für die Eingabe einer zweistelligen Abkürzung (z.B.: LH) und einen, der einen Datums-Zeitraum für die Auswahl ermöglicht. Funktioniert soweit, nur arbeiten die beiden Tabellen nicht zusammen, da ich nicht weiß, wie ich in abap joins ala Mysql hinbekomme. Ich hab schon viel herumgesucht, aber check das einfach nicht.

Hier ist mein Code:

Code: Alles auswählen.

REPORT  Z_107_02.
TABLES: spfli, sflight.

*1. Selection Screen
PARAMETERS CARRIER(3) TYPE c DEFAULT 'LH'.

*2. Selection Screen
SELECT-OPTIONS date FOR sflight-fldate.

START-OF-SELECTION.
  SELECT * FROM spfli
  where carrid = CARRIER.
    WRITE: / spfli-carrid, spfli-connid, spfli-cityfrom, spfli-cityto.
  ENDSELECT.

  SKIP.

  IF SY-SUBRC = 4.
    WRITE: 'No records have been found!'.
  ELSE.
    WRITE:  / 'Number of flights:', SY-DBCNT.
  ENDIF.
Das Problem ist der Select - Block. Ich möchte hier etwas umsetzen, was in SQL ungefähr so aussehen würde:

Code: Alles auswählen.

SELECT * 
FROM spfli, spflight
WHERE spfli-carrid = spflight-carrid
AND spfli-carrid = carrier (der Parameter)
AND sflight-fldate (das Datumsfeld von spflight) = innerhalb der Select-Option
... und dann sollen mit WRITE eben die Spalten spfli-carrid, spfli-connid, spfli-cityfrom, spfli-cityto und sflight-fldate ausgegeben werden.

So, ich hoffe, dass ich das jetzt halbwegs verständlich geschildert hab.

Danke im Voraus für eure Hilfe!

lg

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


Beitrag von simonretter (ForumUser / 25 / 0 / 0 ) »
TABLES: spfli, spflight.

SELECT *
FROM spfli join spflight on spfli~carrid = spflight~carrid
WHERE
spfli~carrid = pa_carrier
AND sflight~fldate in so_datum.


pa_carrier ist dein Parameter
so_datum deine select-options.

Sollte so funktionieren. Wichtig ist ~ wischen Tabelle und Feldname.

Beitrag von curlyhairedguitarist (ForumUser / 3 / 0 / 0 ) »
Danke für die rasche Antwort!

Ich hab das jetzt so umgesetzt:

Code: Alles auswählen.

REPORT  Z_107_02.
TABLES: spfli, sflight.

*1. Selection Screen
PARAMETERS carrier TYPE c DEFAULT 'LH'.

*2. Selection Screen
SELECT-OPTIONS date FOR sflight-fldate.

SELECT *
FROM spfli join sflight on spfli~carrid = sflight~carrid
WHERE
spfli~carrid = carrier
AND sflight~fldate in date.

  SKIP.

  IF SY-SUBRC = 4.
    WRITE: 'No records have been found!'.
  ELSE.

    WRITE:  / 'Number of flights:', SY-DBCNT.
  ENDIF.
Nur bekomm ich jetzt beim checken folgende Fehlermeldung:

"SELECT * using a JOIN must have an INTO clause."

Ich hab selbst schon einiges rumprobiert, bevor ich das Problem hier reingepostet hab.... es läuft irgendwie immer auf dieses INTO raus - nur versteh ich einfach nicht, wie man das korrekt benutzt....

lg

Beitrag von simonretter (ForumUser / 25 / 0 / 0 ) »
Bei Select ... ohne endselect musst du mit into eine interne Tabelle angeben.
(Suche einfach mal in der SAP Hilfe danach. F1 auf Select im Quellcode)

oder in deinem Beispiel mit endselect:

Code: Alles auswählen.


REPORT  Z_107_02. 
TABLES: spfli, sflight. 

*1. Selection Screen 
PARAMETERS carrier TYPE c DEFAULT 'LH'. 

*2. Selection Screen 
SELECT-OPTIONS date FOR sflight-fldate. 

SELECT * 
FROM spfli join sflight on spfli~carrid = sflight~carrid 
WHERE 
spfli~carrid = carrier 
AND sflight~fldate in date. 

*Hier kannst du Zeile für Zeile etwas ausgeben. z.B:
write: / spfli-cityfrom, spfli-cityto.
ENDSELECT.

  SKIP. 

  IF SY-SUBRC = 4. 
    WRITE: 'No records have been found!'. 
  ELSE. 

    WRITE:  / 'Number of flights:', SY-DBCNT. 
  ENDIF.

Zuletzt geändert von simonretter am 22.11.2007 16:29, insgesamt 1-mal geändert.

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
hallo,
nur damit die Sysntax stimmt:

Code: Alles auswählen.

TABLES: spfli, sflight. 

types: begin of my_struc.
       include structure spfli.   
types: end of my_struc.   
data: gt_tab type table of my_struc.

*1. Selection Screen 
PARAMETERS carrier TYPE c DEFAULT 'LH'. 

*2. Selection Screen 
SELECT-OPTIONS date FOR sflight-fldate. 

SELECT * 
FROM spfli join sflight on spfli~carrid = sflight~carrid 
 into CORRESPONDING FIELDS OF TABLE gt_tab
WHERE 
spfli~carrid = carrier 
AND sflight~fldate in date. 

  SKIP. 

  IF SY-SUBRC = 4. 
    WRITE: 'No records have been found!'. 
  ELSE. 

    WRITE:  / 'Number of flights:', SY-DBCNT. 
  ENDIF.
besser: statt select * die Felder angeben, die wirklich benötigt werden und nur diese in die interne Tabelle aufnehmen .

hth khb

Beitrag von curlyhairedguitarist (ForumUser / 3 / 0 / 0 ) »
DANKE! Das hilft schon etwas weiter....

Der Code sieht jetzt so aus:

Code: Alles auswählen.

REPORT  Z_107_02.
TABLES: spfli, sflight.

types: begin of my_struc.
       include structure spfli.
types: end of my_struc.
data: gt_tab type table of my_struc.

*1. Selection Screen
PARAMETERS carrier(3) TYPE c DEFAULT 'LH'.

*2. Selection Screen
SELECT-OPTIONS date FOR sflight-fldate.

SELECT *
FROM spfli join sflight on spfli~carrid = sflight~carrid
 into CORRESPONDING FIELDS OF TABLE gt_tab
WHERE
spfli~carrid = carrier
AND sflight~fldate in date.
WRITE: / spfli-carrid, spfli-connid, spfli-cityfrom, spfli-cityto.

  SKIP.

  IF SY-SUBRC = 4.
    WRITE: 'No records have been found!'.
  ELSE.

    WRITE:  / 'Number of flights:', SY-DBCNT.
  ENDIF.
Leider ist das immer noch nicht ganz richtig: Wenn ich jetzt das Teil starte bekomme ich korrekt beide Auswahlfenster, aber leider werden mir die Spalten dann nicht korrekt angezeigt, die ich eigentlich im Code ausgewählt habe (WRITE)..... Und wenn ich mal 'LH' in das erste Auswahlfenster eintippe und das Datum frei lasse, sollte das Prog. mir normalerweise ja alle LH Flüge uneingeschränkt anzeigen - tut es aber nicht, es zeigt einfach gar nix bzw. ein paar 0000 an.

Nach der Eingabe der Kriterien (also z.B.: 'LH' und das Datum zwischen '23.11.2007' und '25.11.2007') sollen die Spalten, die ich im Code eingetippt habe zurückgegeben werden und zwar zusammen mit dem jeweiligen Flugdatum, damit ich auch überprüfen kann, ob die Ergebnisse stimmen.

Ich weiß da echt nicht mehr weiter im Moment....

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
hallo,
wenn Du die Sätze in eine interne Tabelle schreibst, solltest Du hinterher auch die interne Tabelle ausgeben :wink: .
Da die Tabelle keine Kopfzeile hat, brauchst Du auch noch eine Workarea, dem der Inhalt der auszugebenden Zeile zugewiesen wird. .

Code: Alles auswählen.

DATA: wa_struc TYPE my_struc.
...
...
LOOP AT gt_tab INTO wa_struc.
  WRITE: / wa_struc-carrid, wa_struc-connid, wa_struc-cityfrom, wa_struc-cityto.
ENDLOOP.
lg khb

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1322
Views
MYSQL Connect
von kagel » 21.09.2006 15:10 • Verfasst in ABAP® Core
1
Antw.
2096
Views
vom BSP auf MySQL oder MSSQL
von Neroringer » 04.07.2006 13:46 • Verfasst in Web-Dynpro, BSP + BHTML
3
Antw.
2815
Views
Aus SAP auf eine MySQL-Datenbank zugreifen
von Arkhan » 04.04.2007 17:08 • Verfasst in ABAP® Core
4
Antw.
2966
Views
Was wird als Basis für SAP BW benötigt ?
von dokmatik » 05.10.2005 16:15 • Verfasst in Sonstige Module
2
Antw.
2498
Views
Hilfe bei Aufgabe benötigt
von RpL196 » 21.12.2011 08:20 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von tar 8 / 183
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

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

Regex in where
vor 4 Stunden von tar 8 / 183
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822