Hi,
ich habe ein Problem mit einer Statistik-Funktion:
ich muss von Importierten Daten zusätzliche Informationen aus weiteren Tabellen lesen.
Dabei kann die Detail-Tabelle so ca. 2000-3000 Datensätze haben. Die (Statistik)-Haupttabelle kann recht unterschiedlich sein, aber 500.000 Datensätze ist nicht ungewöhnlich.
SQL-Anweisung
1: 2: 3: 4:
| select h.Haupt_ID, h.Bezeichnung, h.Preis, d.Bezeichnung as NeuBezeichnung, p.Preis as NeuPreis from HauptTabelle h left outer join DetailTabelle d on d.Detail_ID = h.Detail_ID left outer join Preise p on p.Detail_ID = d.Detail_ID and p.PreisListe = 100 |
dieser Select liefert mir alle entsprechenden Felder und ist sehr schnell ausgeführt. Einzig das fetchen der Daten dauert einen Moment. Nur leider kann ich ihn wegen dem "join" mit meiner Query-Komponente nicht zurückschreiben.
Ich muss jetzt irgendwie h.Bezeichnung = NeuBezeichnung und h.Preis = NeuPreis hinbekommen und mir fällt irgendwie keine effiziente Lösung ein...
Interbase 7.5 unterstützt leider bei einem Update-Befehl keinen join und ein
SQL-Anweisung
1: 2: 3: 4:
| update HauptTabelle set Bezeichnung = (Select Bezeichnung from DetailTabelle where Detail_ID = Detail_ID), Preis = (Select Preis from PreisListen where Detail_ID = Detail_ID and PreisListe = 100) |
läuft irgendwie saulangsam.
ich habe auch schon versucht, per Programmcode die Bezeichnung und den Preis in einen zweiten Query zu laden und dann mittels "locate" zu Positionieren. Aber auch dieses ist sehr langsam...
Gibt es hierfür eine effiziente Möglichkeit direkt auf dem Interbase-Server? Die Preislisten-Nummer ist variabel (pro abgesetzten Sql).
MfG und einen schönen abend
raller09
Ps: Die Sqls sind etwas vereinfacht und können kleinere Fehler enthalten, das Problem sollte jedoch erkennbar sein...