Ergebnis 1 bis 5 von 5

Thema: Ergebniss der Verschneidung richtig eintragen

  1. #1
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard Ergebniss der Verschneidung richtig eintragen

    Code:
    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:
    Code:
    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?

  2. #2
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von karl_ha Beitrag anzeigen
    Code:
    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
    Verwende einfach IN statt = vor dem Subselect

    Dann wird dir die Fehlermeldung auch logisch erscheinen

  3. #3
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Meinst du, dass die Unterabfrage falsch ist?

    Code:
    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?
    Geändert von karl_ha (16.12.2009 um 11:14 Uhr)

  4. #4
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

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

    du musste ne sog. korrelierende subquery nehmen

    Code:
    UPDATE hausanschluss AS u
    SET feld = (
      SELECT feld 
      FROM andere_tabelle, hausanschluss AS h
      WHERE h.key = u.key  AND .... )
    sodass da eben genau eine zeile rauskommt ..

  5. #5
    karl_ha ist offline Erfahrener Benutzer
    Registriert seit
    08.03.2009
    Beiträge
    225

    Standard

    Zitat Zitat von symbiont Beitrag anzeigen
    sodass da eben genau eine zeile rauskommt ..
    Danke für die Denkhilfe.

    Code:
    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))

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum