[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)