Entwickler-Ecke
Datenbanken - SQL-Update-Statement: Problem mit GROUP BY
JVS - Mi 09.03.11 20:51
Titel: SQL-Update-Statement: Problem mit GROUP BY
Hallo an alle DB-Spezialisten,
eine Access-DB ist über Delphi-ADOs verbunden.
Die Tabelle KOPF besitzt ein Feld GESAMTWERT, in welches die Summe der zugehörigen Einzelpositionen
(Feld WERT) aus Tabelle EINZELPOS geschrieben werden soll.
Variante 1 (Funktioniert)
Schritt 1:
Update Kopf Set GesamtWert=0
Schritt 2:
Update Kopf
Inner Join
(Select kopfid,wert from EinzelPos) as ep
on ep.kopfid=kopf.id
set GesamtWert=GesamtWert+ep.wert
Variante 2 (Funktioniert nicht)
Das Ganze soll in einem Rutsch passieren, ohne die separate Feldnullung am Anfang.
Die Idee ist wie folgt:
Update Kopf
Inner Join
(Select kopfid,sum(wert) as dieSumme from EinzelPos
Group by kopfid) as ep
on ep.kopfid=kopf.id
set GesamtWert=ep.dieSumme
Das erzeugt den Fehler:
---------------------------
EOleException
Operation muss eine aktualisierbare Abfrage verwenden
---------------------------
Warum?
Verhindert die Verknüpfung der beiden Tabellen über die GROUP BY Klausel die Editierung der Tabelle KOPF?
Hat jemand eine Lösung für die gewünschte 1-Schritt-Aktualisierung?
Gruß und Danke,
JVS
jasocul - Do 10.03.11 09:41
Mal kurz, ohne lange nachzudenken:
SQL-Anweisung
1: 2:
| Update Kopf set Gesamtwert = (Select sum(wert) from EinzelPos where Kopf.id = KopfId) |
So würde es zumindest unter Oracle funktionieren. Der join muss auf deiner DB evtl. anders beschrieben werden. Oracle macht es einem da etwas einfacher. :wink:
JVS - Do 10.03.11 10:00
Hi jasocul,
dein Vorschlag erzeugt den gleichen Fehler (EOleException: Operation muss eine aktualisierbare Abfrage verwenden).
Grundsätzlich ist die Syntax also richtig.
Auch Abfragen mit derartigen Verknüpfungen laufen problemlos.
Nur beim UPDATE da hakt es: Warum kann ADO das Feld nicht aktualisieren?
Mystisch...
vagtler - Do 10.03.11 10:03
Ich denke, dass ADO da weniger das Problem ist... :mrgreen:
jasocul - Do 10.03.11 11:02
Versuch es doch mal ohne Delphi/ADO.
Also einfach mal wirklich NUR das SQL-Statement ausführen.
HelgeLange - Do 10.03.11 17:15
ich habe gerade unseren lokalen SQL-Experten gefragt, er denkt auch (wie ich), dass es einfach das Problem ist, dass das Group By statement nur für SELECT ist. Ein UPDATE ist keine aktualisierbare Datenmenge :)
jasocul - Do 10.03.11 17:28
@HelgeLange:
Du hast aber gesehen, dass in meinem Beispiel kein "Group By" enthalten ist, oder?
Und nach Aussage von
JVS bringt das bei ihm den selben Fehler.
Übrigens funktioniert dieses Statement bei mir ohne Fehlermeldung, wenn ich es direkt ausführe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!