PDA

View Full Version : SQL: View + left join + sortierung



muadeep
15-01-09, 08:57
Versuche mit SQL eine VIEW aus mehreren (insgesamt 5) Datenbanken zu erstellen


CREATE VIEW xxx/TabNEU AS
SELECT a.lfdNr, b.Feld1, c.Feld2, d.Feld3, e.Feld4, f.Feld5
FROM ((((xxx/TabKOPF a
LEFT JOIN xxx/Tab1 b ON a.lfdNr = b.lfdNr)
LEFT JOIN xxx/Tab2 c ON a.lfdNr = c.lfdNr)
LEFT JOIN xxx/Tab3 d ON a.lfdNr = d.lfdNr)
LEFT JOIN xxx/Tab4 e ON a.lfdNr = e.lfdNr)
LEFT JOIN xxx/Tab5 f ON a.lfdNr = f.lfdNr ich brächte jetzt zusätzlich eine Sortierung nach Feld "lfdNr" (z.B. mit GROUP BY)
oder
ist es möglich einen Index (mit Feld "lfdNr") dazu zu erstellen?

Fuerchau
15-01-09, 08:59
Nein. Eine View erlaubt keinen Order By, da du den später ja im Select angibst.

Ein Index auf der PF macht ggf. Sinn, auf einer View (LF) ist das nicht möglich.

B.Hauser
15-01-09, 10:30
Hallo,

SQL views sind grundsätzlich nicht geschlüsselt, d.h. haben weder einen Order By noch erlauben, dass ein Index dafür erstellt wird.

Um die Abfrage einigermaßen performant hinzubekommen, solltest Du allerdings auf alle 6 Tabellen jeweils einen Index (oder geschlüsselte logische Datei) mit LfdNr als Schlüssel-Feld (sofern solche Zugriffswege noch nicht existieren) erstellen, da die Tabellen über die lfdNr verknüpft werden.

Wenn Du später über die View eine GROUP BY Anweisung ausführst, werden die Datensätze automatisch sortiert und entsprechend gruppiert. (auch dann, wenn keine Order By-Anweisung angegeben wurde!).

SQL tendiert dazu zunächst die Daten auszulesen und in temporären Objekten (z.B. Hashtables) zwischen zuspeichern und dann diese temporären Ergebnisse zu verdichten oder sortieren.

Birgitta

Birgitta