Fritze: SQL-Knobelei

Beitrag lesen

Dabei könnte es so einfach sein:

Oha. Dann nehme ich Dich mal beim Wort.

Ein paar Beispieldatensätze in der alten Tabelle, hübsch tabellarisch, und die daraus resultierenden gewünschten Datensätze für die neue Tabelle

Alte Tabelle:

(Ich habe alt.bestellnummer in alt.produktnummer umbenannt.)

alt.produktname  alt.produktnummer  alt.regalnummer  alt.fachnummer
Knüsperdü        23                 1                2
Knüsperdü                           3                8
Pustekuh                            5                2
Rattelfix        42                 5
Sausemaus                           1                4
Sausemaus                           3                6
Sausemaus                           3

Neue Tabellen:

Regale
------
regal.id: Neue Seriennummer
regal.alt = alt.regalnummer

regal.id  regal.alt  (weitere Spalten ohne Belang)
1         1
2         3
3         5

Wir haben in dieser Tabelle also die Zuordnung Alte Regalnummer (regal.alt) - Neue Regalnummer (regal.id).

Fächer
------
fach.id: Neue Seriennummer (jetzt global eindeutig, nicht nur pro Regal)
fach.alt = alt.fachnummer
fach.regal <-> regal.id

fach.id  fach.alt  fach.regal  (weitere Spalten ohne Belang)
1        2         1
2        4         1
3        8         2
4        2         3
5        6         2

Auch in dieser Tabelle wieder die Zuordnung Alte Fachnummer (fach.alt) - Neue Fachnummer (fach.id). Zusätzlich haben wir die Zuordnung Fachnnummer - Regalnummer.

Produktdaten
------------
produkt.id   = Neue Seriennummer (jetzt für alle Produkte ein Eintrag)
produkt.name = alt.produktname
produkt.alt  = alt.produktnummer

produkt.id  produkt.name  produkt.alt  (weitere Spalten ohne Belang)
1           Knüsperdü     23
2           Knüsperdü
3           Pustekuh
4           Rattelfix     42
5           Sausemaus

Diese drei Tabellen, Regale, Fächer und Produktdaten, konnte ich bereits mit je einer join/select-Anweisung befüllen. Es geht jetzt darum, dieses Kunststück auch mit der vierten Tabelle zu vollbringen, so überhaupt möglich:

Lagerbestand
------------
neu.produktid <-> produkt.id (-> produkt.alt = alt.produktnummer)
neu.regalid   <-> regal.id   (-> regal.alt   = alt.regalnummer)
neu.fachid    <-> fach.id    (-> fach.alt    = alt.fachnummer)
neu.info      = Teil aus alt.produktname

neu.produktid  neu.regalid  neu.fachid  neu.info
1              1            1           Knüsperdü
2              2            3           Knüsperdü
3              3            4           Pustekuh
4              3                        Rattelfix
5              1            2           Sausemaus
5              2            5           Sausemaus
5              2                        Sausemaus

PS: Bitte nicht damit aufhalten, die Tabellenstruktur zu überarbeiten - das soll so sein. Mir ist bewusst, dass Beispiel bei der scheinbar / teils überflüssigen neu.regalid-Spalte hinkt. Aber: Es geht nur um das, was ich bereits eingangs und im Titel angesprochen habe.