Ergebnis 1 bis 6 von 6

Thema: Hilfe bei SQL-Syntax

  1. #1
    melanieritz78 ist offline Neuer Benutzer
    Registriert seit
    22.06.2007
    Beiträge
    9

    Standard Hilfe bei SQL-Syntax

    Hallo,

    ich hab eine Datenbank mit 2 Tabellen: "BergeA" und "BergeB" (beide aus Shapefiles importiert). Die Tabellen haben jeweils 2 Spalten: Name und Hoehe. Wie kann ich die Höhen aus BergeB an BergeA übergeben ? Also : Wenn Name von BergeA gleich Name von BergeB UND die Entfernung zwischen den beiden Punkten kleiner 2 KM ist ( um Verwechslung mit gleichnamigen anderen Bergen zu vermeiden) dann übernimm den Hoehenwert von BergeB.

    Kann mir freundlicherweise jemand helfen, wie der entsprechende SQL-Befehl lauten müßte ?

    Vielen Dank,

    Melanie

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von melanieritz78 Beitrag anzeigen
    Hallo,

    ich hab eine Datenbank mit 2 Tabellen: "BergeA" und "BergeB" (beide aus Shapefiles importiert). Die Tabellen haben jeweils 2 Spalten: Name und Hoehe. Wie kann ich die Höhen aus BergeB an BergeA übergeben ? Also : Wenn Name von BergeA gleich Name von BergeB UND die Entfernung zwischen den beiden Punkten kleiner 2 KM ist ( um Verwechslung mit gleichnamigen anderen Bergen zu vermeiden) dann übernimm den Hoehenwert von BergeB.

    Kann mir freundlicherweise jemand helfen, wie der entsprechende SQL-Befehl lauten müßte ?

    Vielen Dank,

    Melanie
    Wo kommt plötzlich die Entfernung her in Deinen Tabellen?

    Na gut, vielleicht hilft Dir folgendes:

    PHP-Code:
    test=# select * from berg_a;
     
    name  hoehe entfernung
    -------+-------+------------
     
    berg1 |   100 |          2
     berg2 
    |   100 |         20
     berg3 
    |   200 |          5
    (3 rows)

    test=*# select * from berg_b;
     
    name  hoehe entfernung
    -------+-------+------------
     
    berg1 |  1000 |          2
     berg2 
    |  1000 |         20
     berg3 
    |   250 |          5
    (3 rows)

    test=*# update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and berg_a.entfernung<10  ;
    UPDATE 2
    test
    =*# select * from berg_a;
     
    name  hoehe entfernung
    -------+-------+------------
     
    berg2 |   100 |         20
     berg1 
    |  1000 |          2
     berg3 
    |   250 |          5
    (3 rows
    Alle mit Entfernung < 10 werden aktualisiert.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Auf PostGIS mit Geometrien:

    frei nach akretschmer:
    Code:
    update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and distance(berg_a.geom, b.geom)<10
    geom bezeichnet das jeweilige Geometrie-Feld, das kann auch anders heissen.
    Die Geometrien müssen eine SRID haben, und die muß gleich sein.

    Gruß Uwe
    Have a lot of fun!

  4. #4
    melanieritz78 ist offline Neuer Benutzer
    Registriert seit
    22.06.2007
    Beiträge
    9

    Standard

    Vielen Dank euch beiden !

    Code:
    update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and distance(berg_a.geom, b.geom)<10
    ist genau das was ich suchte. Werde es später ausprobieren. Dazu allerdings noch zwei Fragen: Als SRID haben beide Tabellen 4326 - Einheit wäre also Dezimalgrad. Liefert distance(berg_a.geom, b.geom) das Ergebnis immer mit Einheit KM ?
    Und berücksichtigt distance(berg_a.geom, b.geom) dass die Erde ein Rotationsellipsoid ist ?

    LG, Melanie

  5. #5
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Zitat Zitat von melanieritz78 Beitrag anzeigen
    Vielen Dank euch beiden !

    Code:
    update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and distance(berg_a.geom, b.geom)<10
    ist genau das was ich suchte. Werde es später ausprobieren. Dazu allerdings noch zwei Fragen: Als SRID haben beide Tabellen 4326 - Einheit wäre also Dezimalgrad. Liefert distance(berg_a.geom, b.geom) das Ergebnis immer mit Einheit KM ?
    Und berücksichtigt distance(berg_a.geom, b.geom) dass die Erde ein Rotationsellipsoid ist ?

    LG, Melanie
    Du könntest auch statt distance distance_sphere/spheroid verwenden. Die nutzen ein Spheroid zur Berechnung. Allerdings stellt sich die Frage wieviel das letztlich ausmacht bei vermutlich kurzen Entfernungen. Ob die Entfernungen metrisch ausgegeben werden müsstest du ausprobieren, das kann ich im Moment nicht mit Sicherheit sagen (WIMRE aber in der Einheit des SR, hier also Grad). Andernfalls könntest du die beteiligten Geometrien erst mit transform in z.B. GaussKrüger umwandeln und dann den Abstand berechnen.

    Gruß Uwe
    Have a lot of fun!

  6. #6
    Maik ist offline Benutzer
    Registriert seit
    20.07.2006
    Beiträge
    74

    Standard

    distance_sphere liefert die Distanz als einzige Funktion immer in Metern. Bei allen anderen Funktionen bekommt man soviel ich weiß die Einheit des SRIDs. Also würde ich einfach distance_sphere verwenden.

    Attention: Meter! Nicht Kilometer! Ich betone das nur aus Erfahrung, da hier gerne Fehler gemacht werden

Ähnliche Themen

  1. trigger / syntax
    Von strippenzieher im Forum PL/pgSQL
    Antworten: 4
    Letzter Beitrag: 26.10.2011, 13:01
  2. Hilfe!!! syntax error at or near
    Von OnkelKC im Forum Programmierung
    Antworten: 6
    Letzter Beitrag: 10.07.2009, 13:22
  3. SQL syntax help
    Von Woltan im Forum SQL
    Antworten: 3
    Letzter Beitrag: 16.04.2009, 10:07
  4. SQL Syntax überprüfen
    Von chrimp im Forum SQL
    Antworten: 10
    Letzter Beitrag: 25.07.2006, 18:43
  5. Syntax Error
    Von rfq im Forum PL/pgSQL
    Antworten: 6
    Letzter Beitrag: 15.03.2006, 14:38

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