Guten Morgen,
mit einem Skript wäre die Aufgabe zweifelsohne längst erledigt, aber da ich bis jetzt alles per SQL gelöst habe, hat mich hat der Ehrgeiz gepackt: Es sollen Daten aus drei alten Tabellen in vier neue übertragen werden, es geht nur noch im die letzte, und auch da nur noch um eine Spalte.
Alte Tabelle:
Gegeben sei eine Lagerliste, in der für jeden eingelagerten Artikel ein Datensatz existiert:
alt.produktname
alt.bestellnummer
alt.regalnummer
alt.fachnummer
.fachnummer hat die unangenehme Besonderheit, in jedem Regal existieren zu können, da die Fächer jedes Regals immer ab 1 durchnummeriert wurden. Alleine aus .fachnummer lässt sich der Lagerort also nicht bestimmen.
Obendrein kann .fachnummer auch unbekannt (NULL) sein, der Lagerist war dann wieder zu faul, das Produkt steht im Gang.
.produktname ist immer eingetragen, .bestellnummer jedoch nicht. Die Kombination .produktname & .bestellnummer führt bei den neuen Tabellen zu einem Produkteintrag produkt.id; .produktname="Bla" & .bestellnummer=42 hätte also produkt.id 1, .produktname="Bla" & .bestellnummer=NULL hätte produkt.id 2. Der gleiche .produktname kann auch unterschiedliche .bestellnummern haben.
Bereits erfolgreich gefüllte neue Tabellen:
regal.id = Seriennummer, neu vergeben, eindeutig
regal.alt = alt.regalnummer
fach.id = Seriennummer, neu vergeben, eindeutig
fach.alt = alt.fachnummer
fach.regal = regal.id
produkt.id = Seriennummer, neu vergeben, eindeutig
produkt.name = alt.produktname
produkt.alt = alt.bestellnummer
Das Problemkind:
neu.produktid = produkt.id (-> produkt.alt -> alt.bestellnummer)
neu.regalid = regal.id (-> regal.alt -> alt.regalnummer)
neu.fachid = fach.id (-> fach.alt -> alt.fachnummer)
neu.info = Teil aus alt.produktname
Für die "insert into … select"-Anweisung habe ich bislang folgendes zusammengeknobelt:
select teil(alt.produktname),produkt.id,regal.id from regal
right join alt on regal.alt=alt.regalnummer
left join produkt on alt.produktname=produkt.titel and if(alt.bestellnummer is not null,alt.bestellnummer=produkt.alt,true);
Das scheint auch zu funktionieren, jedoch bekomme ich die neue Fachnummer da nicht unter. Ich habe den Verdacht, dass es mit einem weiteren join nichts werden wird und ich mit einer Hilfstabelle arbeiten muss.
Wer kann helfen?
PS: Man möge mich bitte nicht nach der if-Klausel fragen; es geht um die Produktnamen, die mit unterschiedlichen Bestellnummern auftreten, aber die tatsächliche Funktion kann ich im Moment nur mit "Einfälle im Dunkeln der Nacht" erklären.