Hallo,
mit meinen vielen vergeblichen Versuchen komme ich immer stärker durcheinander und bitte deshalb um Hilfe.
- Tabelle ORTE2 enthält u.a. die Felder Ort-ID (= Alort) und Name (95.000 Datensätze).
- Tabelle PLZ enthält u.a. die Felder PLZ, Ort-ID, PLZ-Art, Str-Verz (40.000 Datensätze).
- Über Ort-ID ist kein ForeignKey möglich, weil es sich nicht um die eigentliche ORTE-Tabelle handelt, sondern um eine Tabelle mit nicht mehr gültigen Ortsnamen; aber Ort-ID soll als Verknüpfung dienen. Es bestehen folgende Verbindungen:
- Zu einem Eintrag aus ORTE2 gibt es 0 Einträge in PLZ.
- Zu einem Eintrag aus ORTE2 gibt es 1 Eintrag in PLZ.
- Zu einem Eintrag aus ORTE2 gibt es mehrere Einträge in PLZ.
Per
View möchte ich eine Liste als
Verbindung zwischen ORTE2 und PLZ haben: Wenn in PLZ kein Eintrag vorhanden ist, dann fehlt dieser Ort; bei einem Eintrag soll genau dieser für den JOIN verwendet werden; bei mehreren Einträgen soll derjenige mit der kleinsten PLZ (und nur dieser) verwendet werden.
Ziel soll etwas wie folgt werden:
SQL-Code:
SELECT ORTE2.Name, ORTE2.Alort,
PLZ.PLZ,
PLZ.Plz_Art,
PLZ.Str-Verz
FROM ORTE2
JOIN PLZ ON PLZ.Alort = ORTE2.Alort
Es gelingt mir aber nicht, die JOIN-Klausel so zu erweitern oder ein SubSelect so einzubauen, dass MIN(PLZ) (oder FIRST 1) berücksichtigt wird.
Ergänzend muss ich darauf hinweisen, dass Firebird Probleme hat mit verschachtelten SubSelects oder IN-Prüfungen bei WHERE-Klauseln und sich gerne aufhängt. Nach Erledigung dieses Problems kommen noch ein weiterer JOIN und eine WHERE-Klausel hinzu; aber die sind unproblematisch.
Könnt Ihr mir einen Weg nennen? Danke! Jürgen