Rolf B: Abfrage übe r2 Tabellen, zuviele Treffer

Beitrag lesen

Hallo dedlfix,

Die Frage dabei ist: Warum ist das so?

Das ist wohl der entscheidende Punkt. Ist "table2" die richtige Datenquelle für das Land? Denn wenn die PLZ dort mehrfach vorhanden sind, dann hat "table2" offenbar einen anderen Zweck.

Vor allem ist table2 dann nicht sauber normalisiert.

  • Wenn plz ein Schlüsselattribut von table2 ist, dann gibt es offenbar weitere Schlüsselattribute, denn sonst könnte es nicht mehrere Rows zu einer PLZ geben. In diesme Fall ist das Land abhängig von einem Schlüsselteil -> 2NF verletzt.
  • Wenn plz kein Schlüsselattribut von table2 ist, dann existiert eine Abhängigkeit zwischen Nichtschlüsselattributen -> 3NF verletzt.

Und die Folge: SQL Queries machen Kopfschmerzen.

Ein Workaround wäre eine DISTINCT Abfrage. Entweder im Join oder im Subselect

SELECT DISTINCT a.plz, a.ort, b.land
FROM  table1 a 
      LEFT JOIN table2 b ON a.plz=b.plz
SELECT a.plz, a.ort,
       SELECT DISTINCT land FROM table2 b WHERE a.plz = b.plz
FROM  table1 a 

Beides ist potenziell ineffizient, je nach DB-Inhalten. Die korrekte Lösung ist das Auslagern der (plz,land) Relation in eine eigene Table - was natürlich wieder andere Folgen hat, weil dann für jeden Zugriff auf den Ländernamen die neue Table befragt werden muss.

Rolf

--
sumpsi - posui - obstruxi