![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
verschachtelte Query
Hallo Zusammen,
der Titel ist etwas nichtssagend, aber ich wusste nicht, wie ich es prägnant betiteln könnte... Ich habe eine Tabelle, in der alle Komponenten, die für die Produktion eines Artikel benötigt werden, aufgelistet sind. Bedauerlicher Weise ist diese liste aber mehrdimensional. ArtikelNr ----Werkzeug-Hauptsatz (für jede mögliche Maschine gibt es einen) --------Werkzeug-Baugruppe (die Teil des Werkzeug-Hauptsatzes ist) (Es kann aber auch ein Einzelwerkzeug sein, dass zum Werkzeug-Hauptsatz gehört) ------------Einzelwerkzeug (das zur Werkzeug-Baugruppe gehört) Die Tabelle hat nur 2 relevante Spalten, nämlich STBGNR und STKOMP. Aussehen tut das Ganze ähnlich diesem Beispiel: STBGNR----STKOMP 4711--------4711MD06 (ArtikelNr-----WerkzeugHauptsatz) 4711MD06--78945 (WerkzeugHauptsatz-----Baugruppe oder Einzelwerkzeug) 78945-------75523 (Baugruppe-----Einzelwerkzeug) Es gibt keinerlei Anhaltspunkte in der Nummer, um was es sich handelt. Bis auf der WerkzeugHauptsatz kann alles eine Baugruppe oder ein Einzelerkzeug sein. Die Tabelle beinhaltet über 200.000 Datensätze. Ich möchte eine Query schreiben, in der ich alle WerkzeugBaugruppen und Einzelwerkzeuge, die für eine Auswahl an Artikeln benötigt werden, aufgelistet bekomme. Ich habe dafür keinen Ansatz, den ich hier posten könnte. Aktuell würde ich viele einzelne Query's schreiben, die ich mit dem Ergebnis der vorherigen zusammenbauen würde und dann das Ergebnis aus den Teilergebnissen zusammensetzen müsste. Kein schöner Weg, daher frage ich Euch, ob jemand einen schlaueren aber dennoch performanten Weg kennt. Vielen Dank für's Mitdenken Patrick |
AW: verschachtelte Query
Hallo. Die Anzahl der Ebenen ist fix? Also immer drei? Dann könntest Du mit
Code:
arbeiten.
JOIN
Ansonsten gibt es noch die Möglichkeit ne StoredProcedure zu schreiben. Das ist in den meißten Fällen immernoch schneller als zig einzelne Abfragen übers Neztzwerk zu zerren. Letzte Option, wie oft ändert sich die Tabelle und wie groß ist sie? Bzw, wie oft musst Du zugreifen? Für bestimmte Sachen arbeite ich mit einer lokalen Pufferung der gesamten Tabelle. |
AW: verschachtelte Query
Hallo Stefan,
die Tabelle verändert sich ständig und die Zugriffe sind sehr variabel. Ich habe auch feststellen müssen, dass die Levels nicht immer fix 3 sind... Ich habe jetzt folgenden Ansatz gefunden, der die Anzahl der Query's vielleicht reduziert.
Delphi-Quellcode:
Damit bekomme ich jedenfalls eine Liste über 5 Spalten, aus den ich mir das Ergebnis zusammenbauen könnte und die Query ist auch noch sehr schnell...
SELECT WH.stbgnr,
WH.stkomp as HGR, //Hauptgruppe BG.stkomp as BGR, //Baugruppe UG.stkomp as UGR, //Untergruppe WZ.stkomp as EWZ, //Einzelwerkzeug RS.stkomp as Rest //Falls es noch ein Level gibt FROM phstru WH left join phstru BG on BG.stbgnr=WH.stkomp left join phstru UG on UG.stbgnr=BG.stkomp left join phstru WZ on WZ.stbgnr=UG.stkomp left join phstru RS on RS.stbgnr=WZ.stkomp where WH.stbgnr like '%10022439SD73' //ArtikelNr und MaschinenNr and wh.tamagr regexp '3100|3500|5100' //Materialgruppen, um das Ergebnis einzugrenzen |
AW: verschachtelte Query
Klingt nach unbekannter Verschachtelungstiefe aka Rekursion:
![]() ![]() ![]() |
AW: verschachtelte Query
![]()
SQL-Code:
with recursive temptablename (id, name, parent_id) as (
select id, name, parent_id from products where parent_id = 19 -- Initialisierung union all select p.id, p.name, p.parent_id from products p inner join temptablename on p.parent_id = temptablename.id -- Rekursion ) select * from temptablename; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz