Update Problem (SQL)

ManfredP

Grünschnabel
Hallo,

ich versuche das ergebniss einer abfrage in ein andere tabelle zu bekommen und scheitere kläglich. Kann mir jemand helfen Danke im voraus.

UPDATE Private SET Private.P_Buchungen = (SELECT Sum(Buchungen.P_GastID) AS SummevonP_GastID FROM Private INNER JOIN Buchungen ON Private.P_GastID = Buchungen.P_GastID GROUP BY Private.P_GastID, Buchungen.Active HAVING Buchungen.Active = True);
 
Hi,
um dir zu helfen, wäre es nicht schlecht, wenn man wüsste, wo dein Problem liegt, und was für Fehlermeldungen evtl. kommen.

PS: Schreib SQL-Queries bitte in die CODE-Tags (am besten ein bisschen formatiert), da sie sich so besser lesen lassen.
 
sorry - hier die längere story


Tabelle 1 enthält Kundendetails: Private PK = P_GastID, ... Buchungen, etc
nur die 2 felder sind für diese frage wichtig

Tabelle 2 enthält die Buchungen die ein Kunde gemacht hat: Es gibt also n Datensätze wovon einer der FK's der PK von Private ist.

Ich möchte jetzt in der Tabelle 1 Feld Buchungen reinschreiben wieviele Datensätze für jeden Kunden in der Tabelle 2 enthalten sind.

Wenn ich die Querry

SELECT Sum(Buchungen.P_GastID) AS SummevonP_GastID
FROM Private
INNER JOIN Buchungen ON Private.P_GastID = Buchungen.P_GastID
GROUP BY Private.P_GastID, Buchungen.Active
HAVING Buchungen.Active = True

benutze bekomme ich als ergebniss für jeden gast die anzahl der buchungen zurück.

Da ich aber das ergebniss in dem Feld Tabelle1.Buchungen brauche, brauche ich also ein
Update Statement welches den Wert in das feld Tabelle1.Buchungen schreibt.


Also war meine Idee

UPDATE Private SET Private.P_Buchungen =

vor die SQL Abrfrage zu stellen. In Access bekomme ich aber folgende Fehlermeldung.

"Operation muss eine aktualisierbare Abfrage verwenden."
 
Hi, mal noch eine Frage, hab nämlich so erstmal keine Fehler entdecken können.Führst du die SQL-Befehle direkt in Access aus oder nutzt du dafür ein Programmiersprache?

Falls du eine Programmiersprache nutzt, könnte dir das vielleicht weiterhelfen:
Link
 
@niggo: 100% in access 2000

Ich verstehe es ja auch nicht wo der fehler liegen soll aber es funkt halt nicht.
 
einen Fehler habe ich schon gefunden
anstelle von SUM(.. muss ich COUNT(... nehmen

trotzdem noch der gleiche fehler
 
Hallo!

Also zunächsteinmal gibt es bei dir keine Verbindung zwischen der Unterabfrage und dem UPDATE-Befehl.
Die Unterabfrage von dir liefert eine Liste von Werten.
Beim Befehl
Code:
UPDATE Private SET Private.P_Buchungen = (...)
muss aber immer nur ein Wert als Ergebnis der Unterabfrage zurückkommen, denn im Feld P_Buchungen kann ja keine Liste von Werten stehen. Um nur den passenden Wert deiner Unterabfrage zu erhalten, musst Du dort auf die Tabelle vom UPDATE-Befehl verweisen. Da Du die Tabelle Private in beiden Abfragen verwendest, solltest Du mit Alias-Namen (z.B. P1 und P2) arbeiten.

Also z.B. so oder ähnlich (hab ich nicht gestestet):

Code:
UPDATE Private P1 SET P1.P_Buchungen = 
(  SELECT COUNT(*) AS SummevonP_GastID 
   FROM Private P2
   INNER JOIN Buchungen ON P2.P_GastID = Buchungen.P_GastID 
   WHERE P1.P_GastID = P2.P_GastID
   AND Buchungen.Active = True
)

Code:
GROUP BY spalte HAVING spalte=5
ist übrigens das gleiche wie
Code:
WHERE spalte=5
 
Hi,

Das einzige, was mir noch einfällt ist, dass dein SELECT "ungültig" ist. Soll heißen: dein SELECT kann mehr als einen Wert zurück geben. Und wenn das der Fall ist, weiß die UPDATE - Operation nicht mehr welchen Wert sie nehmen soll. Und das wird halt vorher schon geprüft. Das kann zum Beispiel und dem GROUP BY auf zwei Felder liegen. Versuch mal das SELECT so umzubauen, dass die Einschränkungen in eine WHERE - Klausel setzt, so das in jedem Fall nur noch ein Wert zurück kommen kann.
 
Zurück