Ergebniss der Verschneidung richtig eintragen

INSERT INTO hausanschluss(subcluster_nr) SELECT clusterflaeche.subcluster_nr FROM clusterflaeche, hausanschluss WHERE st_within(hausanschluss.the_geom, clusterflaeche.the_geom)

Das bewirkt, dass jene Fläche, in der ein Hausanschluss liegt berechnet wird in die Tabelle hausanschluss eingetragen wird. Allerdings als neuen Datensatz.

Also müsste es ein Update sein:

UPDATE hausanschluss SET subcluster_nr = (SELECT clusterflaeche.subcluster_nr FROM clusterflaeche, hausanschluss WHERE st_within(hausanschluss.the_geom, clusterflaeche.the_geom))

Nun meldet er
FEHLER: als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile

Wie müsste die Abfrage lauten, dass das Ergebniss der Verschneidung in den entsprechenden Datensatz eingetragen wird?

Verwende einfach IN statt = vor dem Subselect

Dann wird dir die Fehlermeldung auch logisch erscheinen

Meinst du, dass die Unterabfrage falsch ist?

FEHLER:  Syntaxfehler bei »IN«
LINE 1: UPDATE hausanschluss SET subcluster_nr IN (SELECT clusterfla

Hatte das Problem schon einmal hier Beschrieben: http://www.pg-forum.de/postgis/3708-verschneidung.html

Ich hatte es danach mit php gelöst. Das muss doch aber auch direkt in postgres gehen?

aeh … sorry … hab die haelfte uebersehen … vergiss das mit dem IN

du musste ne sog. korrelierende subquery nehmen

UPDATE hausanschluss AS [color=Red]u[/color]
SET feld = (
  SELECT feld 
  FROM andere_tabelle, hausanschluss AS [color=Blue]h[/color]
  WHERE [color=Blue]h.key[/color] = [color=Red]u.key[/color]  AND .... )

sodass da eben genau eine zeile rauskommt …

Danke für die Denkhilfe.

UPDATE hausanschluss AS u 
SET subcluster_nr = (
  SELECT clusterflaeche.subcluster_nr 
  FROM clusterflaeche, hausanschluss AS h 
  WHERE u.hausanschluss_id = h.hausanschluss_id 
  AND st_within(h.the_geom, clusterflaeche.the_geom))