Bulk-Aktualisierung einer Tabelle von Zeilen aus einer anderen Tabelle
2 Tabellen:
Employees
- EmployeeID
- LeadCount
Leads
- leadID
- employeeID
Ich soll ein update der Employees.LeadCount
Spalte durch zählen der Anzahl von leads in der Leads
Tabelle, die den gleichen EmployeeID
.
Hinweis: Es kann mehr als 1 in Führung mit der gleichen employeeID, also ich muss ein DISTINCT(SUM(employeeID))
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sich für die Einstellung einer Daten-Synchronisierung-problem. Als Zeilen in der Tabelle Führt werden eingefügt, aktualisiert oder gelöscht wird, müssen Sie zum aktualisieren der Mitarbeiter.LeadCount Spalte ständig.
Die beste Lösung wäre, nicht zum speichern der LeadCount Spalte, sondern eine Neuberechnung der Anzahl der leads an, die mit einem SQL-Aggregat-Abfrage, so müssen Sie den Wert. So, es wird immer richtig sein.
Die andere Lösung ist, erstellen Sie Trigger auf der Tabelle Führt für INSERT -, UPDATE-und DELETE, so dass Sie halten die Mitarbeiter.LeadCount Spalte alle aktuellen die Zeit. Zum Beispiel mit MySQL-trigger syntax:
Weitere option, wenn Sie MySQL verwenden, ist die Verwendung von multi-table-UPDATE-syntax. Dies ist eine MySQL-Erweiterung zum SQL -, es ist nicht portabel zu anderen RDBMS. Zuerst reset der LeadCount in alle Zeilen null ist, dann Mach eine Verknüpfung zu der Tabelle Führt und erhöhen den LeadCount in jeder Reihe, hergestellt durch die Verknüpfung.
Verbindet die gleiche Arbeit für updates (und löscht), wie Sie für wählt (edit: in einigen populären RDBMS', wenigstens*):
SUM(DISTINCT EmployeeId) macht keinen Sinn - Sie brauchen nur ein COUNT(*).
Riss von oben und entfernen Sie die abhängigen Unterabfrage.
BEARBEITEN Es die "group By" nicht "distinct" :b (Dank Mark Brackett)