[opengeodb] Was stimmt mit meiner SQL-Abfrage nicht?
Thomas Mack
mack at ifis.cs.tu-bs.de
Die Jul 31 12:49:41 CEST 2007
Am Dienstag, 31. Juli 2007 12:34 schrieb Tamas Szalai:
> Am Montag, den 30.07.2007, 16:47 +0200 schrieb Tamas Szalai:
> > aha ... nur noch 48 Ergebnisse - sehr gut. danke. :o)
>
> Mein nächstes und wahrscheinlich auch letztes Problem ist folgende
> Abfrage:
>
> SELECT g.loc_id AS "ID",
> g.text_val AS "Ort"
>
> FROM geodb_textdata g,
> geodb_textdata g1,
> geodb_hierarchies gh
>
> WHERE gh.loc_id = g.loc_id
> AND gh.id_lvl5 = g1.loc_id
> AND g1.loc_id = 524
> AND g.text_type = 500100000
> AND g1.text_type = 500100000
> AND gh.level = 6
>
> GROUP BY g.loc_id
> ORDER BY 2
>
> Dies soll mir die Gemeinden/Orte aus einem Landkreis anzeigen. Als
> Beispiel dient hier der Landkreis Sangerhausen. Die Orte werden
> angezeigt und stimmen auch soweit überein, nur stören die Postleitzahlen
> im Ergebnis.
> Wie kann ich diese entfernen?
> Warum werden die PLZ überhaupt mit angezeit, wo der text_type nur den
> Namen anzeigen soll?
Der Name eines Postleitzahlgebietes ist die Postleitzahl dieses Gebietes.
500100000 ist der Name eines Eintrags. Es gibt z.Zt. zwei verschiedene
Eintragstypen: nämliche Orte (oder so ähnlich) als einen Typ, und
Postleitzahlgebiete als weiterer Typ.
Diese beiden Typen werden in der geodb_locations unterschieden. Da Dich nur
die Ortsnamen interessieren, machst Du noch einen weiteren Join über die die
geodb_locations:
FROM ..., geodb_locations loc
WHERE ... AND loc.loc_type = .... AND loc.loc_id = g.loc_id
Außerdem solltest Du auch auf is_default_name überprüfen, sonst kann es
geschehen, daß Du mehrere Ortsnamen für ein und denselben Ort (oder
Bundesland oder Landkreis o.ä.) bekommst. Also so etwas wie:
... AND g.is_default_name = true AND g1.is_default_name = true
Thomas