aximand
Goto Top

Schleifen in SQL-Abfrage?

Hallo,

ich habe 3 Tabellen:

Tabelle 1: Artikelnummer, Menge, VorgangID Für den Beleg
Tabelle 2: Stueckliste, Element, Menge, Sortierung
hier werden die Untermaterialien aufgelistet - Stueckliste = Artikelnummer und Element = Artikelnummer in der Stueckliste
Tabelle 3: Artikelnummer, ISTStückliste // wenn ISTStueckliste = -1 dann ist es eine Stueckliste und es gibt in Tabelle 2 den Eintrag mit Artikelnummer=Element

Jetzt ist es so, dass ein Artikel eine Stueckliste sein kann

Vorgang 0815 hat 3 Positionen, also 3 Artikelnummern

Position 1: Artikel A besteht also aus 2x UnterArtikel UA1 und 3x UnterArtikel UA2
Position 2: Artikel B besteht aus 1x UB1 und 1x UA2 und 1x UB2
UB2 besteht allerdings seinerseits auch aus einer Stückliste und setzt sich aus 2x UUA1 und 2x UUA2 zusammen
Position 3: 5x Artikel Z (keine Stückliste, also ISTStueckliste = 0)

In Summe würden als benötigt werden: 2x UA1, 4x UA2, 1x UB1, 2x UUA1 und 2x UUA2 sowie 5x Z

Diese Summen würde ich gerne irgendwie "einfach" ermitteln können. Ich hab da zwar Ansätze aber die sind irgendwie aufwendig und schwer verständlich.

Wie fragt man sowas ab, da die Verschachtelung x-beliebig tief sein könnte

Ist das verständlich nieder geschrieben?

Content-Key: 387798

Url: https://administrator.de/contentid/387798

Printed on: May 21, 2024 at 10:05 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Sep 27, 2018 at 13:26:09 (UTC)
Goto Top
Kommt immer auf dein DB-Design an, wenn das aber kompliziert ist, dann hast du dir selbst den Stecken ins Rad gehalten. Zwischentabelle hilft da in der Regel.

VG
Member: ukulele-7
ukulele-7 Sep 27, 2018 updated at 14:17:55 (UTC)
Goto Top
Das geht eigentlich sehr gut in SQL und bedarf keiner Schleife. Dein Stichwort heißt common table expression und sieht erstmal unspektakulär aus, ist aber für rekurisve Abfragen das Mittel der Wahl.
https://docs.microsoft.com/de-de/sql/t-sql/queries/with-common-table-exp ...

Leider kann natürlich die, warum auch immer, sehr belibte DB MySQL das nicht bzw. erst seit Kurzem, um welches DBMS (Version?) geht es?