[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