[opengeodb] Was stimmt mit meiner SQL-Abfrage nicht?
Thomas Mack
mack at ifis.cs.tu-bs.de
Die Jul 31 15:26:13 CEST 2007
Am Dienstag, 31. Juli 2007 14:46 schrieb Tamas Szalai:
> Am Dienstag, den 31.07.2007, 14:20 +0200 schrieb Thomas Mack:
> > Also mal kurz dazu:
> >
> > 1) 'GROUP BY' kenn ich so, daß alle Attribute gruppiert werden müssen
> > (also auch g.text_val), bis auf einen arithmetischen Operator (also
> > z.B.avg(g.loc_id), sonst macht das keinen Sinn, und sonst klappt das auch
> > nicht. Mein Postgres sieht es genauso, deshalb funktioniert diese Anfrage
> > bei mir nicht in dieser Form.
> >
> > 2) Wenn ich 'GROUP BY g.loc_id' weglasse, bekomme ich nur ein Elbingerode
> > in WR.
>
> Den Tipp mit dem GROUP BY hatte ich hier gestern in der Liste bekommen,
> da ich mehrfach doppelte Resultate hatte. Lasse ich 'GROUP BY g.loc_id'
> habe ich also noch mehr doppelte Resultate im Ergebnis.
>
Um doppelte Resultate auszufiltern, gibt es 'distinct': select distinct
g.loc_id, g.text_val FROM ...
Aber wenn Du mal schaust, dann siehst Du, daß Elbingerode seit 1.1.2005 nicht
mehr zum Regierungsbezirk Magdeburg gehört (weil es seit dem keine
Regierungsbezirke mehr gibt in Sachsen-Anhalt).
Also bekommst Du zwei Datensätze zurück: einmal das Elbingerode, wie es bis
zum 31.12.2004 existierte, und einmal das Elbingerode, wie es seit dem
1.1.2005 existiert. Beide Einträge haben level=6, beide Einträge haben als
Landkreis Wernigerode, usw. usf.. DESHALB bekommst Du halt beide Einträge
zurückgeliefert.
Schau halt, welche Datensätze Du eigentlich haben willst: nur aktuelle, oder
alle. Und wenn Du alle Orte haben möchtest, die je zum Landkreis WR gehörten,
kannst Du anschließend mit distinct die doppelten ausfiltern. Ansonsten mußt
Du halt sagen, welches Datum Dir genehm wäre (... AND valid_until
>= '31.7.2007' oder so etwas).
Thomas