Ergebnis 1 bis 3 von 3

Thema: postgres<>mssql update syntax

  1. #1
    merlin-hst ist offline Neuer Benutzer
    Registriert seit
    18.06.2007
    Beiträge
    13

    Standard postgres<>mssql update syntax

    Hallo,

    ich habe bisher mit dem SQL Server gearbeit und will/muss/möchte jetzt Postgres benutzen . Jetzt habe ich mal eine recht spezielle Frage zur Syntax des update-Befehls. Im SQL Server kann ich so etwas schreiben:

    update p -- p ist der selbe Alias wie in der from-Klausel
    set lastLoggerMeasurementDate = (select max(dataDate) from
    tblEffBlockData where efficiencyBlockId = el.efficiencyBlockId)
    from tblLogger dl
    join tblPlant p on dl.plantId = p.plantId
    join viewEffBlockLogger el on el.loggerId = dl.loggerId
    Mein Probelm ist, dass ich im SQL Server im update-Teil einen Alias verwenden kann, der in der from-Klausel definiert ist. Natürlich funktioniert das jetzt nicht mehr so, da Postgres den Alias als Tabelle interpretiert. Was ich eigentlich machen will:

    update alle Zeilen in tblPlant und berechne für jede Zeile den Wert für 'lastLoggerMeasurementDate'. Dieser Wert kann mit
    select max(dateDate) from tblEffBlockData where efficiencyBlockId = xxx
    ermittelt werden. Die efficiencyBlockId kommt aus dem join in der from-Klausel, wie oben zu sehen.

    Vielleicht kann mir jemand helfen, diese Abfrage in Postgres neu zu schreiben. Was bei mir nicht funktioniert hat, ist folgendes Beispiel:
    update tblPlant
    set lastLoggerMeasurementDate = (select max(dataDate) from
    tblEffBlockData where efficiencyBlockId = el.efficiencyBlockId)
    from tblLogger dl
    join tblPlant p on dl.plantId = p.plantId
    join viewEffBlockLogger el on el.loggerId = dl.loggerId
    In diesem Fall hatten alle Einträge in tblPlant den gleichen Wert, was nicht unbedingt gewollt ist

    Vielen Dank
    Lothar

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.471

    Standard

    Zitat Zitat von merlin-hst Beitrag anzeigen

    Was ich eigentlich machen will:

    update alle Zeilen in tblPlant und berechne für jede Zeile den Wert für 'lastLoggerMeasurementDate'. Dieser Wert kann mit ermittelt werden.

    Also sowas wie folgt:

    Code:
    test=*# select * from t1;
     id | max_date
    ----+----------
      1 |
      2 |
      3 |
    (3 rows)
    
    test=*# select * from t2;
     id |     d
    ----+------------
      1 | 2007-01-01
      1 | 2007-02-01
      1 | 2007-03-01
      2 | 2007-03-01
      3 | 2007-03-01
      3 | 2007-04-01
    (6 rows)
    
    test=*# update t1 set max_date = (select max(d) from t2 where t1.id=t2.id);
    UPDATE 3
    test=*# select * from t1;
     id |  max_date
    ----+------------
      1 | 2007-03-01
      2 | 2007-03-01
      3 | 2007-04-01
    (3 rows)
    Oder hab ich Dich flasch verstanden?


    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
    merlin-hst ist offline Neuer Benutzer
    Registriert seit
    18.06.2007
    Beiträge
    13

    Standard

    Hallo,

    Vielen Dank für die schnelle Antwort. Ich bin halt schon zu stark auf den SQL Server fokussiert Folgendes select scheint erstmal zu funktionieren:
    update plant
    set lastLoggerMeasurementDate =
    (
    select max(dataDate)
    from loggermeasurementdata m , datalogger dl
    where m.datalogger_id = dl.id and dl.id = plant.datalogger_id)
    )
    ,
    lastInverterMeasurementDate =
    (
    select max(dataDate)
    from invertermeasurementdata m, inverter i
    where m.inverter_id = i.id and i.plant_id = plant.id )
    )
    Lothar

Ähnliche Themen

  1. Migration MSSQL -> PostgreSQL 8.4
    Von alger im Forum Migration
    Antworten: 1
    Letzter Beitrag: 18.02.2011, 22:58
  2. Update von Postgres von 8.3.4 und PostGIS 1.3.6 auf neueste stabile Version
    Von Hanno im Forum Sonstige Installationsprobleme
    Antworten: 4
    Letzter Beitrag: 13.04.2010, 08:29
  3. Problem Postgres startet nicht mehr nach Windows-Update
    Von cpa im Forum Allgemeines
    Antworten: 8
    Letzter Beitrag: 21.09.2009, 20:38
  4. Postgres-Update-8.1-to-8.3
    Von Jens im Forum Sonstige Installationsprobleme
    Antworten: 8
    Letzter Beitrag: 07.09.2008, 18:35
  5. Portierung von MSSQL auf PostgreSQL
    Von burning snow im Forum SQL
    Antworten: 1
    Letzter Beitrag: 28.05.2007, 15:01

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