Code: Alles auswählen.
SELECT dokar doknr dokvr dwnam dokst doktl FROM draw INTO (wa_tab-dokar, wa_tab-doknr, wa_tab-dokvr, wa_tab-dwnam, wa_tab-dokst, wa_tab-doktl) WHERE doknr IN s_doknr AND dokar IN s_dokar AND dokst IN s_dokst.
SELECT objky FROM drad INTO wa_tab-objky WHERE doknr EQ wa_tab-doknr AND dokvr EQ wa_tab-dokvr AND doktl EQ wa_tab-doktl.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
wolli
Hmm, aber die Treffer sollen doch am Ende alle in einer Tabelle landen, wenn ich das richtig verstehe. Dann wäre es doch am einfachsten und schnellsten einen einzigen SELECT mit JOIN zu bauen, oder?DeathAndPain hat geschrieben: ↑28.08.2023 12:45Nur ist das performancetechnisch scheußlich (d.h. sehr langsam). SELECT...ENDSELECT ist eh schon langsam, und dann noch geschachtelt ist noch viel schlimmer. Besser wäre, den äußeren SELECT in eine interne Tabelle (INTO TABLE) zu machen und den inneren dann mit FOR ALL ENTRIES IN zu bauen. Das sollte um Größenordnungen schneller laufen.
Code: Alles auswählen.
SELECT draw~dokar, draw~doknr, draw~doktl, draw~dokvr, drad~objky, draw~dwnam, draw~dokst
FROM draw
JOIN drad
ON drad~dokar = draw~dokar
AND drad~doknr = draw~doknr
AND drad~doktl = draw~doktl
AND drad~dokvr = draw~dokvr
INTO CORRESPONDING FIELDS OF TABLE doc_info_records
WHERE draw~dokar IN s_dokar
AND draw~doknr IN s_doknr
AND draw~dokst IN s_dokst.
Ist das Verwenden von Alias echt so üblich? Habe das bisher nur selten in freier Wildbahn gesehen.DeathAndPain hat geschrieben: ↑31.08.2023 13:03Und ich liebe es, wie Du in Deinem Join keine Aliase benutzt hast, was sonst fast alle machen, obwohl sie den SELECT nur schlechter lesbar machen.
Da bin ich Deiner Meinung, insbesondere wenn dann für (hier im Beispiel) für "DRAW" den Alias "a" und für "DRAD" den Alias "b" verwendet. Ist dann unübersichtlicher als ohne Alias. (Ist mir aber auch schon in freier Wildbahn über den Weg gelaufen.a-dead-trousers hat geschrieben: ↑31.08.2023 21:59Macht IMHO nur Sinn wenn man eine Tabelle mit sich selbst joined oder wenn man "lange" Tabellennamen hat. Die Viersteller der meisten SAP-Standardtabellen sind kein Grund für einen Join, finde ich.
Spätestens wenn man den gleichen JOIN das zweite Mal baut sollte man darüber nachdenken, zumal man den View dann auch in der SE16(N) verwenden und ihn somit auch Nicht-Technikern zur Verfügung stellen kann. Das ist in manchen Fällen sehr hilfreich.a-dead-trousers hat geschrieben: ↑31.08.2023 21:59Ich persönlich leg mir aber trotzdem lieber einen (CDS-)View dafür an. Ist wiederverwendbar und laut den aktuellen Roadmaps die "Zukunft" von SAP.
Gerade hier im Forum lese ich das sonst in praktisch jedem Programmbeispiel, das einen Join enthält. Aber auch in "freier Wildbahn", soweit es bei den betreffenden Entwicklern überhaupt für einen Join reicht (ich weiß, das klingt zynisch, ist aber so).black_adept hat geschrieben: ↑31.08.2023 14:34Ist das Verwenden von Alias echt so üblich? Habe das bisher nur selten in freier Wildbahn gesehen.DeathAndPain hat geschrieben: ↑31.08.2023 13:03Und ich liebe es, wie Du in Deinem Join keine Aliase benutzt hast, was sonst fast alle machen, obwohl sie den SELECT nur schlechter lesbar machen.
Dann kann man den Alias aber immer noch so wählen, dass er sich gut nachvollziehbar liest, in diesem Falle also z.B. PROCI_I anstelle der gängigen einbuchstabigen Aliasnamen, bei denen dem Leser nicht sofort ersichtlich ist, worauf sie sich beziehen.Haubi hat geschrieben: ↑01.09.2023 11:12Wo ich definitiv immer Aliase verwende ist, wenn Tabellen in einem Namensraum liegen, also z.B. /SCDL/DB_PROCI_I. Einerseits weil es dann eben übersichtlicher wird und ich den Alias so wählen kann, dass er etwas über den Zweck der Tabelle aussagt, andererseits mag ich keine Blasen an den Fingerkuppen... ;-)
Wenn ich mich recht erinnere, werden Views in der SE16 aber nicht in richtige Datenbank-Joins übersetzt, sondern in Unions oder so. Damit ist der Zugriff weniger performant. Das sage ich jetzt aber nur aus der Erinnerung, ohne es gemessen zu haben oder anderweitig belegen zu können.Spätestens wenn man den gleichen JOIN das zweite Mal baut sollte man darüber nachdenken, zumal man den View dann auch in der SE16(N) verwenden und ihn somit auch Nicht-Technikern zur Verfügung stellen kann. Das ist in manchen Fällen sehr hilfreich.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
black_adept