[opengeodb] Was stimmt mit meiner SQL-Abfrage nicht?
Tamas Szalai
typo3_maillist at tamas.szalai.de
Die Jul 31 13:07:34 CEST 2007
Am Dienstag, den 31.07.2007, 12:49 +0200 schrieb Thomas Mack:
> 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
Danke!
SELECT g.loc_id AS "ID",
g.text_val AS "Ort"
FROM geodb_textdata g,
geodb_textdata g1,
geodb_hierarchies gh,
geodb_locations loc
WHERE gh.loc_id = g.loc_id
AND gh.id_lvl5 = g1.loc_id
AND g1.loc_id = 524 /*ID des Landkreises*/
AND g.text_type = 500100000
AND g1.text_type = 500100000
AND loc.loc_type = 100700000
AND loc.loc_id = g.loc_id
AND g.is_default_name = true
AND g1.is_default_name = true
AND gh.level = 6
GROUP BY g.loc_id
ORDER BY 2
funzt. :o)