Mysql: UPDATE JOIN bei mehreren Übereinstimmungen in Tabelle2 möglich?

K

kuemmel

Hallo,

ich setze mich momentan mit folgendem Problem auseinander:
In der ersten Tabelle, die geupdatet werden soll, sollen alle Werte einer bestimmten Spalte um jeweils den Faktor erhöht werden, der in der zweiten Spalte angegeben ist und bei denen die Bedingung übereinstimmt.
Das Problem dabei ist nun, dass es mehrere Fälle gibt die diese Bedingung erfüllen. Leider wird in diesem Fall immer nur der erste Treffer berücksichtigt.

Zur Veranschaulichung meines Problems:
Tabelle 1: villages_ressources
Spalten: VillageID | RessourceID | Quantity | Productivity

Tabelle 2: workers
Spalten: RessourceID | VillageID | Number

Code:
UPDATE villages_ressources, workers, SET
 Quantity=Quantity+(villages_ressources.Productivity*workers.Number) WHERE workers.VillageID=villages_ressources.VillageID AND villages_ressources.RessourceID=workers.RessourceID

Es existieren für jede Stadt eine Anzahl Arbeiter, die eine bestimmte Ressource abbauen. Die Anzahl der Arbeiter, die diese Ressource abbaut soll mit der Produktivität der Ressource multipliziert werden und anschließend zu den gesamten vorhandenen Ressourcen dieser Stadt hinzuaddiert werden.
Soweit funktioniert das ganze noch. Exisitieren aber nun mehrere Arbeiter mit der gleichen RessourceID und VillageID, so wird jeweils nur die erste Übereinstimmung hinzuaddiert.

Gibt es eine Möglichkeit, dass alle Einträge in workers, die die Bedingung erfüllen, berücksichtigt werden?

Wenn das so nicht geht, möchte ich gerne eine temporäre Tabelle erstellen, in der die Summe der Arbeiter gebildet wird, die die gleiche RessourceID und VillageID besitzen. Ich möchte also eine SUM(Number) realisieren, die jeweils der Bedingung entsprechen und diese in einer temporären Tabelle ablegen. Anschließend soll hierauf das Update ausgeführt werden, da nun keine Mehrdeutigkeiten mehr vorkommen.
Wie schaffe ich es aber, dass die Summe der Arbeiter nach zusammengehöriger VillageID und RessourceID getrennt zusammengezählt werden?

Danke im Vorraus für alle, die sich meines Problems annehmen. Hoffe mein Problem ist verständlich geworden.

mfg

Markus
 
Zurück