[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