Autor Beitrag
raller09
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 04.12.07 18:15 
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.

ausblenden 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
ausblenden 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...