Vergleichsoperator im Inner Join

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

Vergleichsoperator im Inner Join

Beitrag von ManMan (ForumUser / 26 / 10 / 0 ) »
Hallo zusammen,

ich habe eine Select-Anweisungen, wo Vonlagertyp (vltyp) und Nachlagertyp (nltyp) nicht im Bereich von 100 bis 500 liegen müssen. Wenn ich das Programm ausführe, bekomme ich entsprechende Tabelle mit Werten, aber es dauert 10 min. Kann man die Ausgabe evtl. beschleunigen?

Code: Alles auswählen.

 SELECT  ltak~lgnum
         ltap~matnr
         ltak~tanum
         ltap~vltyp
         ltap~nltyp
         ltap~vlpla
         ltap~nlpla
 INTO CORRESPONDING FIELDS OF TABLE gt_ltak
  FROM  ltak
  INNER JOIN ltap ON ltak~lgnum = ltap~lgnum
  WHERE  ltap~vltyp < 100 OR ltap~vltyp > 500
  AND    ltap~nltyp  < 100 OR ltap~nltyp > 500
  AND   ltak~lgnum = p_lgnum
  AND   ltak~bdatu IN s_bdatu
  AND   ltak~bwart IN s_bwart.
Und noch eine Frage: wenn ich die Klammer setze

Code: Alles auswählen.

 WHERE ( ltap~vltyp < 100 OR ltap~vltyp > 500)
  AND   ( ltap~nltyp  < 100 OR ltap~nltyp > 500)
wird die Tabelle schneller angezeigt, aber die Werte sind komplett anders (nicht wie ohne Klammern). Woran liegt es?

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


Re: Vergleichsoperator im Inner Join

Beitrag von jaybeert (ForumUser / 4 / 0 / 0 ) »
Hier kannst du alles zu Selects mit join Anweisungen nachlesen.
https://help.sap.com/http.svc/rc/abapdo ... t_join.htm

Zu deinem Fall, die Where Bedingung bezieht sich in einem Select mit join immer auf die gebildete Ergebnismenge. Je mehr Bedingungen hier vorhanden sind, desto länger dauert es natürlich.

Ich würde die zwei Bedingungen für den Bereich weglassen und nach dem Select in der gt_ltak machen.
So in etwa:

Code: Alles auswählen.

Delete gt_ltak where not ( vltyp BETWEEN 100 AND 500 )  AND not ( nltyp BETWEEN 100 AND  500 ).
Gruß

Re: Vergleichsoperator im Inner Join

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Ich denke, die zweite Frage ist die entscheidende, und die Antwort darauf beantwortet auch die erste.

Genau wie in der Mathematik Punktrechnung vor Strichrechnung geht, geht AND vor OR. Das ist nicht nur in ABAP so, sondern in allen mir bekannten Programmiersprachen. Hingegen ist es völlig egal, wo Du in Deinem IF-Statement einen Absatz machst.

Ohne Klammer hat Deine Bedingung also effektiv folgende Bedeutung:

Code: Alles auswählen.

ltap~vltyp < 100 
OR ltap~vltyp > 500 AND ltap~nltyp  < 100
OR ltap~nltyp > 500 AND ltak~lgnum = p_lgnum
Es reicht also schon aus, dass ltap~vltyp < 100 ist. Dann prüft er den Rest gar nicht mehr. Damit wird der SELECT annähernd die gesamte LTAK zurückliefern, da Du auf diese Weise auch die Einschränkung ltak~lgnum = p_lgnum außer Kraft gesetzt hast. Na logisch dauert das lange, weil Du halt eine riesige Ergebnismenge bekommst und zudem kein Index genutzt werden kann. Er muss also sequentiell durch die ganze LTAK suchen.

Ich denke, das ist hier das Ausschlaggebende. Viele Einschränkungen in einem JOIN kosten nach meiner Erfahrung nicht nennenswert Performance, solange Indizes genutzt werden und die Ergebnismenge im Rahmen ist.

Re: Vergleichsoperator im Inner Join

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
Is the issue resolved? Can you please share how you did it if you have already solved.
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Re: Vergleichsoperator im Inner Join

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
Not sure, how my previous answer got deleted.

Why dont you use a range table with EXCLUDE. It will help you to remove anything in between 100 - 500.

Check this snippet.

TABLES: LTAP.

RANGES: lr_vltyp FOR ltap-vltyp.
RANGES: lr_nltyp FOR ltap-nltyp.

lr_nltyp-sign = lr_vltyp-sign = 'E'. " EXCLUDE
lr_nltyp-option = lr_vltyp-option = 'BT'.
lr_nltyp-low = lr_vltyp-low = 100.
lr_nltyp-high = lr_vltyp-high = 500.

APPEND lr_vltyp.
APPEND ln_vltyp.


SELECT ltak~lgnum
ltap~matnr
ltak~tanum
ltap~vltyp
ltap~nltyp
ltap~vlpla
ltap~nlpla
INTO CORRESPONDING FIELDS OF TABLE gt_ltak
FROM ltak
INNER JOIN ltap ON ltak~lgnum = ltap~lgnum
WHERE ltap~vltyp in lr_vltyp " EXLUDE between 100-500
AND ltap~nltyp in lr_nltyp " EXLUDE between 100-500
AND ltak~lgnum = p_lgnum
AND ltak~bdatu IN s_bdatu
AND ltak~bwart IN s_bwart.
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Re: Vergleichsoperator im Inner Join

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Not sure, how my previous answer got deleted.
I do not know for sure either, but I have a rough guess...

The problem is that all of your suggestions that I have seen in this forum, including this one, are not helpful and usually indicate that you have not really understood the question. For that reason, I hope you take no offense when I suggest that you refrain from trying to give any further advice in the future. All you achieve is cluttering up the threads, and you may have noticed that everyone else is ignoring your texts because they are never really helpful/on topic.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Romaniac


Re: Vergleichsoperator im Inner Join

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
But isn't EXCLUDE in RANGE Table an option?

My answers are in English. May be they become meaningless when it is published in German. Translation might mess with the actual meaning..
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Re: Vergleichsoperator im Inner Join

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
English is not the problem here.

If you look at the original code, you will (or will not...) notice that his WHERE-condition contains a logical misconception, which I pointed out so you could/should have known even without noticing yourself.

Whether you fill a RANGES-table with the desired conditions and pass it to the WHERE-clause or specify the conditions directly in the WHERE-clause makes no difference whatsoever to performance and outcome of the SELECT-clause. RANGE tables are for situations in which the desired conditions are not static. So your answer was completely off-topic, as it had nothing to do with his problem. As always.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
sapyard


Re: Vergleichsoperator im Inner Join

Beitrag von sapyard (ForumUser / 31 / 5 / 2 ) »
Thanks DeathAndPain.. I overlooked the performance issue stated by the thread owner. I will try to read the questions more closely and try to be closer to the solution.

Translation of the page to English is also causing the miscommunication. If I translate your previous answer to English, it deletes signification words even though I believe you have replied in English. (issue in English to English translation). :D

Anyway, I will try to be more accurate going forward. My intention is clear to help and learn mutually. :)
Thanking you.

With Regards,
Raju.
----------------------
Raju Shrestha
www.sapyard.com
----------------------

Re: Vergleichsoperator im Inner Join

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Dear creators of sapyard. To which of these characters would you compare your KI at the moment?
Bild
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Vergleichsoperator im Inner Join

Beitrag von Romaniac (Specialist / 198 / 57 / 26 ) »
@black_adept:
Bist Du sicher dass das KI ist?

@SAPYARD:
why don't you answer topics in english SAP Forums, there would be no problem with wrong google translations...

Aber(off-Topic on):
Das ist gleichzeitig ein sehr gutes Beispiel für ins Ausland ausgelagerte Entwicklung (shared services, egal ob Polen, Rumänien, Indien etc.), die Kommunikation ist sehr viel mühsamer, zeitverzögert und kostet am Ende einfach mehr. Ich habe einen Freund der Freiberufler vermittelt, der macht zu Zeit die Erfahrung dass viele Fachabteilungen nur deutschsprachige Berater suchen, der Einkauf aber versucht den Preis für die Leistung zu drücken und deshalb eher Angebote aus dem Ausland präferiert. Die Fachabteilung sagt aber dass sie nichts davon hat dass der Berater zwar billiger ist, sie aber nichts von der Einsparung haben da sie ja nach wie vor dasselbe Gehalt haben. Aber dafür haben sie wesentlich mehr Aufwand (nicht jeder sind der englischen Sprache allumfänglich mächtig, Kommunikation nur über Ticktetsystem etc.) um mit den nicht-deutsch-sprachigen Berater zu kommunizieren. Also versuchen Sie das auszusitzen bis der Einkauf dann nachgibt. Ich verstehe nicht warum diese "Geiz ist geil, aber am Ende doch teuer" Mentalität immer noch existiert.

Beispiel einer Kollegin von eben gerade: SAP Basismitarbeiter macht Ticket auf weil er ein paar Fragen zu Windows hat und beschreibt den Sachverhalt in Deutsch. Der Inhalt des Tickets wird (automatisiert?) übersetzt, die Fragen wurden komplett unterschlagen. Der Titel konnte nicht korrekt übersetzt werden also kam der Name des hauseigenen SAP Systemes mit rein. Jetzt wurde das Ticket der entsprechenden Stelle zugeordnet --> und das war die Abteilung die das Ticket erstellt hat! Die darf jetzt ihre eigenen Fragen beantworten...

Aber das ist ein eigenes Thema an dem auch unsere Regierung mitschuld hat als die Hetzjagd auf alle Freiberufler losging und Unternehmen seither Angst haben welche unter Vertrag zu nehmen, dann halt das Geld lieber ins Ausland schieben und kein Problem mit der RV und dem Zoll haben... --> Alles nur kurz angesprochen, dass sind alles eigene abendfüllende Themen...
(off-Topic off)
Geht nicht gibts nicht

Re: Vergleichsoperator im Inner Join

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Das ist gleichzeitig ein sehr gutes Beispiel für ins Ausland ausgelagerte Entwicklung (shared services, egal ob Polen, Rumänien, Indien etc.), die Kommunikation ist sehr viel mühsamer, zeitverzögert und kostet am Ende einfach mehr.
Wenn die Belegschaft des Unternehmens nicht so gut englisch kann, dass man sich darauf als Unternehmenssprache einigen kann, dann ist das so, ja.
Aber das ist ein eigenes Thema an dem auch unsere Regierung mitschuld hat als die Hetzjagd auf alle Freiberufler losging und Unternehmen seither Angst haben welche unter Vertrag zu nehmen
Echte Freiberufler sind kein Problem, aber wenn der "Freiberufler" am Ende nur noch für ein bestimmtes Unternehmen arbeitet, dann finde ich es schon legitim anzuzweifeln, dass das wirklich noch ein Freiberufler ist.

Re: Vergleichsoperator im Inner Join

Beitrag von Romaniac (Specialist / 198 / 57 / 26 ) »
Aber das ist ein eigenes Thema an dem auch unsere Regierung mitschuld hat als die Hetzjagd auf alle Freiberufler losging und Unternehmen seither Angst haben welche unter Vertrag zu nehmen
Echte Freiberufler sind kein Problem, aber wenn der "Freiberufler" am Ende nur noch für ein bestimmtes Unternehmen arbeitet, dann finde ich es schon legitim anzuzweifeln, dass das wirklich noch ein Freiberufler ist.[/quote]

Natürlich meine ich die unter uns die als echte Freiberufler agieren, aber die Trennlinie zum schwarzen Schaf ist sehr unscharf. Ich arbeite für 3 verschieden Unternehmen, beim letzten Kunden waren an einem Raum für 6 Externe Namensschilder drauf, darunter auch mein Name. Wenn die RV das sieht bin ich per se Scheinselbständig in ALLEN Verträgen, bekomme sofort eine Rechnung für 4 Jahre Nachzahlung Sozialleistungen und darf dann vor den Sozialgerichten beweisen dass ich Selbständig handle --> https://www.vgsd.de/scheinselbstaendigkeit/
Geht nicht gibts nicht

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1634
Views
Vergleichsoperator CP
von cut1 » 28.12.2006 12:09 • Verfasst in ABAP® Core
11
Antw.
1278
Views
CHECK STATEMENT ohne Vergleichsoperator (?)
von Dominic » 13.03.2020 14:55 • Verfasst in ABAP® für Anfänger
1
Antw.
753
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
1
Antw.
1334
Views
inner join
von dimes » 20.01.2006 07:57 • Verfasst in ABAP® Core
3
Antw.
2930
Views
inner join
von dawns » 14.05.2007 15:49 • Verfasst in ABAP® für Anfänger

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 4 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