Selektion aus mehreren Tabellen

Getting started ... Alles für einen gelungenen Start.
42 Beiträge • Vorherige Seite 2 von 3 (current) Nächste
42 Beiträge Vorherige Seite 2 von 3 (current) Nächste

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
was ist denn da falsch??? Nun gibt's dump.

Code: Alles auswählen.

  data: begin of LS_LIEF,
          BUKRS type EKPO-BUKRS,
          WERKS type EKPO-WERKS,
          KUNNR type EKPO-KUNNR,
          LIFNR type EKKO-LIFNR,
    end of LS_LIEF,
    LT_LIEF like standard table of LS_LIEF with header line.

  data: R_LIEFNR       type range of LFM1-LIFNR, " RANGE-Tabelle
        R_LIEFNR_LINE  like line of  R_LIEFNR.

  data: begin of LS_LFM1,
          LIFNR type LFM1-LIFNR,
          EKORG type LFM1-EKORG,
    end of LS_LFM1,
    LT_LFM1 like standard table of LS_LFM1.

  data: LS_ALV_OUT type TY_ALV_OUT.

  select P~BUKRS P~WERKS P~KUNNR K~LIFNR
    from EKPO as P inner join EKKO as K on P~EBELN = K~EBELN
    into corresponding fields of table LT_LIEF
    where P~BUKRS = '0020'
      and P~WERKS = '0010'.

  delete adjacent duplicates from LT_LIEF comparing LIFNR.

loop at lt_lief into r_liefnr_line.
  R_LIEFNR_LINE-SIGN   = 'I'.   "I = include
  R_LIEFNR_LINE-OPTION = 'NE'.
  R_LIEFNR_LINE-LOW    = 'LT_LIEF-LIFNR'.

  append R_LIEFNR_LINE to R_LIEFNR.
endloop.

  select LIFNR EKORG from LFM1 into table LT_LFM1
        where LIFNR in R_LIEFNR
          and EKORG = '0020'.

  loop at LT_LFM1 into LS_LFM1.
    move-corresponding LS_LFM1 to LS_ALV_OUT.
    append LS_ALV_OUT to GT_ALV_OUT.
  endloop.

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


Re: Selektion aus mehreren Tabellen

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Hinweis: In der WHERE-Bedingung steht ein 'NE'.

Wenn ich aber alle Sätze einer Tabelle löschen soll, die in einer anderen Tabelle vorkommen, dann muss ich anders vorgehen, weil die Aussage mit NE immer wahr ist. Dann muss ich einen READ TABLE auf die LIFNR machen und bei sy-subrc ne 0 weiß ich, dass der Satz nicht vorkommt.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Tut mir leid... Ich blick's nicht!!!

Wie soll ich also vorgehen?

Re: Selektion aus mehreren Tabellen

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »

Code: Alles auswählen.

  data: begin of LS_LIEF,
* So zu typisieren ist eine grundsätzlich schlechte Idee: BUKRS type BUKRS etc. ist besser.
          BUKRS type EKPO-BUKRS,
          WERKS type EKPO-WERKS,
          KUNNR type EKPO-KUNNR,
          LIFNR type EKKO-LIFNR,
    end of LS_LIEF,
    LT_LIEF like standard table of LS_LIEF with header line.

  data: R_LIEFNR       type range of LFM1-LIFNR, " RANGE-Tabelle
        R_LIEFNR_LINE  like line of  R_LIEFNR.

  data: begin of LS_LFM1,
          LIFNR type LFM1-LIFNR,
          EKORG type LFM1-EKORG,
    end of LS_LFM1,
    LT_LFM1 like standard table of LS_LFM1.

  data: LS_ALV_OUT type TY_ALV_OUT.

  select P~BUKRS P~WERKS P~KUNNR K~LIFNR
    from EKPO as P inner join EKKO as K on P~EBELN = K~EBELN
    into corresponding fields of table LT_LIEF
    where P~BUKRS = '0020'
      and P~WERKS = '0010'.

  delete adjacent duplicates from LT_LIEF comparing LIFNR.

loop at lt_lief into ls_lief   .  "r_liefnr_line hat einen anderen typ als lt_lief
  R_LIEFNR_LINE-SIGN   = 'I'.   "I = include
  R_LIEFNR_LINE-OPTION = 'NE'.
*  R_LIEFNR_LINE-LOW    = 'LT_LIEF-LIFNR'.   "So schreibt er das Literal "LT_LIEF-LIFNR" da rein  
  R_LIEFNR_LINE-LOW    = ls_lief-lifnr.       
  append R_LIEFNR_LINE to R_LIEFNR.
endloop.

  select LIFNR EKORG from LFM1 into table LT_LFM1
        where LIFNR in R_LIEFNR
          and EKORG = '0020'.

  loop at LT_LFM1 into LS_LFM1.
    move-corresponding LS_LFM1 to LS_ALV_OUT.
    append LS_ALV_OUT to GT_ALV_OUT.
  endloop.
Das dürfte funktionieren.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Geht leider nicht!

Fehler im Modul RSQL der Datenbankschnittstelle.

Irgendwas stimmt da nicht: mit der Where-bedingung?

Code: Alles auswählen.

  select LIFNR EKORG from LFM1 into table LT_LFM1
        where LIFNR in R_LIEFNR
          and EKORG = '0020'.

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Wenn in der RANGE-Tabelle zuviele Einträge sind, kommt es zu einem Dump.

Wenn es einen Dump gibt, brauchen wir manchmal etwas mehr Infos, als nur "es dumpt".

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Die RANGE hat 2300 Einträge. Liegt's daran? Wie löst man dies dann?

Die Fehlermeldung lautet:
- die maximale Größe eines SQL-Statements wurde überschritten.
- Das statement enthält zu viele Eingabevariablen
- Die Eingabedaten benötigen mehr Platz als vorhanden
- ....

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ja, 2300 sind zuviel.

Ich glaube, daß fängt so bei ca > 1500/2000 Einträge an Problem zu machen.

Du kannst Dir nun eine interne Tabelle zusammenbasteln und dann "FOR ALL ENTRIES" in dieser neu erstellten Tabelle benutzen.
So gesehen, war das erstellen der RANGE-Tabelle keine so gute Idee. Das sollte man nur anwenden, wenn man weiß, dass es nicht viele Einträge werden können.

Andere Möglichkeit wäre, diese Range-Tabelle zu verdichten, so daß es eben weniger Einträge als ca. 1500 werden. Das ist aber auch oft recht unsicher, deshalb lieber "FOR ALL ENTRIES".

Versuch doch einfach "Spasshalber" mal die Tabelle und das Feld "R_LIEFNR_LINE-LOW" für "FOR ALL ENTRIES" zu mißbrauchen ;-)

Später solltest Du das, auch wenn es funktioniert, aber trotzdem in eine einfache interne Tabelle ändern.

Folgende Benutzer bedankten sich beim Autor Unit605 für den Beitrag:
Nadine_2706


Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Dann kehren wir doch wieder mal zum Punkt von oben zurück:

Code: Alles auswählen.

  select LIFNR EKORG into table LT_LFM1 from LFM1
    for all entries in LT_LIEF
        where LIFNR ne LT_LIEF-LIFNR
          and EKORG = '0020'.
Es passiert nichts.
Oder wie hast du dies mit 'das Feld "R_LIEFNR_LINE-LOW" für "FOR ALL ENTRIES" zu mißbrauchen' gemeint?

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Kein System zu Hand....aber probier mal die Änderungen weiter unten

Code: Alles auswählen.

      data: begin of LS_LIEF,
    * So zu typisieren ist eine grundsätzlich schlechte Idee: BUKRS type BUKRS etc. ist besser.
              BUKRS type EKPO-BUKRS,
              WERKS type EKPO-WERKS,
              KUNNR type EKPO-KUNNR,
              LIFNR type EKKO-LIFNR,
        end of LS_LIEF,
        LT_LIEF like standard table of LS_LIEF with header line.

      data: R_LIEFNR       type range of LFM1-LIFNR, " RANGE-Tabelle
            R_LIEFNR_LINE  like line of  R_LIEFNR.

      data: begin of LS_LFM1,
              LIFNR type LFM1-LIFNR,
              EKORG type LFM1-EKORG,
        end of LS_LFM1,
        LT_LFM1 like standard table of LS_LFM1.

      data: LS_ALV_OUT type TY_ALV_OUT.

      select P~BUKRS P~WERKS P~KUNNR K~LIFNR
        from EKPO as P inner join EKKO as K on P~EBELN = K~EBELN
        into corresponding fields of table LT_LIEF
        where P~BUKRS = '0020'
          and P~WERKS = '0010'.

      delete adjacent duplicates from LT_LIEF comparing LIFNR.

    loop at lt_lief into ls_lief   .  "r_liefnr_line hat einen anderen typ als lt_lief
      R_LIEFNR_LINE-SIGN   = 'I'.   "I = include
      R_LIEFNR_LINE-OPTION = 'NE'.
    *  R_LIEFNR_LINE-LOW    = 'LT_LIEF-LIFNR'.   "So schreibt er das Literal "LT_LIEF-LIFNR" da rein  
      R_LIEFNR_LINE-LOW    = ls_lief-lifnr.      
      append R_LIEFNR_LINE to R_LIEFNR.
    endloop.
==================== ALT ALT ALT =================================================
      select LIFNR EKORG from LFM1 into table LT_LFM1
            where LIFNR in R_LIEFNR
              and EKORG = '0020'.
==================== NEU NEU NEU =================================================
      select LIFNR EKORG from LFM1 into table LT_LFM1 for all entries in R_LIEFNR
            where LIFNR eq R_LIEFNR-LIFNR
              and EKORG = '0020'.
=====================================================================
      loop at LT_LFM1 into LS_LFM1.
        move-corresponding LS_LFM1 to LS_ALV_OUT.
        append LS_ALV_OUT to GT_ALV_OUT.
      endloop.
     

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Vielen Dank für Deine Hilfe!

Geht aber leider nicht. Nun gibt's Syntaxfehler: Es existiert keine Komponente mit Name 'LIFNR' bei select.

select LIFNR EKORG from LFM1 into table LT_LFM1
for all entries in R_LIEFNR
where LIFNR eq R_LIEFNR-LIFNR
and EKORG = '0020'.

Es gibt die aber! Bin echt am Verzweifeln!

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »

Code: Alles auswählen.

  where LIFNR eq R_LIEFNR-LIFNR
ist ja auch blödsinn... das Feld heißt LOW.....

Code: Alles auswählen.

  where LIFNR eq R_LIEFNR-LOW

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Das geht zwar, aber ich brauche

Code: Alles auswählen.

where LIFNR ne R_LIEFNR-LOW
Und das selektiert er nicht aus!

Re: Selektion aus mehreren Tabellen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Sag bloß, du hast in der Range-Tabelle alles als ausschließendes Kriterium hinterlegt. :evil:
Ich würde dringend davon abraten so etwas (noch dazu mit 2300 Einträgen) auf die Datenbank loszulassen.
Je nach dem wie viele Einträge die Tabelle hat, kann so eine Abfrage EWIGKEITEN dauern.
Da die Datenbank in so einem Fall ALLES selektieren muss und erst danach aussortieren kann.

Ich rate dir wirklich, die Abfrage zu überdenken und das Ganze irgendwie "positiv" (einschließendes Kriterium) zu formulieren.

lg ADT

Hier ein paar Infos zu ABAP und Performance:
http://www12.sap.com/services/education ... C%5D%5D%7C
http://www.sap-press.de/katalog/buecher ... telID-1821
http://www.sap-img.com/abap/performance ... tement.htm
Zuletzt geändert von a-dead-trousers am 06.10.2011 10:05, insgesamt 1-mal geändert.
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: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
a-dead-trousers hat geschrieben:Sag bloß, du hast in der Range-Tabelle alles als ausschließendes Kriterium hinterlegt. :evil:
Ich würde dringend davon abraten so etwas (noch dazu mit 2300 Einträgen) auf die Datenbank loszulassen.
Je nach dem wie viele Einträge die Tabelle hat, kann so eine Abfrage EWIGKEITEN dauern.

Ich rate dir wirklich, die Abfrage zu überdenken und das Ganze irgendwie "positiv" (einschließendes Kriterium) zu formulieren.

lg ADT
Nicht nur Reden schwingen... besser machen.

Ab hier darfst Du nun übernehmen :up:

Vergleichbare Themen

19
Antw.
5822
Views
Selektion von mehreren Belegarten
von kisa » 16.05.2012 13:40 • Verfasst in ABAP® für Anfänger
10
Antw.
3716
Views
BAPI Selektion aus Ranges Tabellen
von Besi » 08.02.2005 17:53 • Verfasst in ABAP® Core
22
Antw.
9651
Views
Daten aus mehreren Tabellen auslesen
von phil1982 » 07.08.2007 15:13 • Verfasst in ABAP® für Anfänger
6
Antw.
2647
Views
Daten aus mehreren Tabellen ausgeben
von thr-hn » 25.03.2014 09:14 • Verfasst in ABAP® für Anfänger
2
Antw.
1591
Views
Verwendung von mehreren Tabellen in DB-Views
von ST22 » 17.04.2008 10:34 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
Gestern von tar 8 / 381
Daten an Tabelle binden
vor 2 Tagen von Bright4.5 3 / 1644
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 298
IT0024 Qualifikationen CP-ID
vor 3 Tagen von DeathAndPain 2 / 538

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
Gestern von tar 8 / 381
Daten an Tabelle binden
vor 2 Tagen von Bright4.5 3 / 1644
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 298
IT0024 Qualifikationen CP-ID
vor 3 Tagen von DeathAndPain 2 / 538

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Tagen von snooga87 1 / 230
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3412
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9961