Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

SELECT JOIN MIN richtig kombinieren?

  Alt 16. Nov 2007, 14:09
Datenbank: Firebird • Version: 2.0 • Zugriff über: Firebird Net Provider
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:
    1. Zu einem Eintrag aus ORTE2 gibt es 0 Einträge in PLZ.
    2. Zu einem Eintrag aus ORTE2 gibt es 1 Eintrag in PLZ.
    3. 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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat