2 Tabellen:
%Vor% Ich möchte die Spalte Employees.LeadCount
aktualisieren, indem ich die Anzahl der Leads in der Tabelle Leads
mit demselben EmployeeID
zählt.
Hinweis: Es kann mehr als eine Ableitung mit der gleichen Mitarbeiter-ID geben, also muss ich eine DISTINCT(SUM(employeeID))
machen.
Sie bereiten sich auf ein Datensynchronisierungsproblem vor. Wenn Zeilen in der Leads-Tabelle eingefügt, aktualisiert oder gelöscht werden, müssen Sie die Spalte Employees.LeadCount ständig aktualisieren.
Die beste Lösung wäre, die LeadCount-Spalte nicht zu speichern, sondern die Anzahl der Leads mit einer SQL-Aggregatabfrage neu zu berechnen, wenn Sie den Wert benötigen. So wird es immer stimmen.
%Vor%Die andere Lösung besteht darin, Trigger für die Tabellen "Leads" für INSERT, UPDATE und DELETE zu erstellen, sodass Sie die Spalte "Employees.LeadCount" immer aktuell halten. Verwenden Sie zum Beispiel die MySQL-Triggersyntax:
%Vor%Eine weitere Option, wenn Sie MySQL verwenden, ist die Verwendung der UPDATE-Syntax für mehrere Tabellen. Dies ist eine MySQL-Erweiterung für SQL, die nicht auf andere RDBMS-Marken übertragbar ist. Setzen Sie zuerst den LeadCount in allen Zeilen auf Null zurück, führen Sie dann einen Join zur Leads-Tabelle aus und inkrementieren Sie den LeadCount in jeder vom Join erzeugten Zeile.
%Vor%Joins funktionieren genauso für Updates (und Löschvorgänge) wie für selects (Bearbeiten: in einigen populären RDBMS, mindestens *):
%Vor%Die SUM (DISTINCT EmployeeId) macht keinen Sinn - Sie brauchen nur ein COUNT (*).
Tags und Links sql sql-update