Se está configurando para un problema de sincronización de datos. Como las filas en la tabla Leads se insertan, actualizan o eliminan, debe actualizar constantemente la columna Employees.LeadCount.
La mejor solución sería no almacenar la columna LeadCount en absoluto, sino volver a calcular el recuento de clientes potenciales con una consulta agregada de SQL cuando necesite el valor. De esa manera siempre será correcto.
SELECT employeeID, COUNT(leadId) AS LeadCount
FROM Leads
GROUP BY employeeID;
La otra solución es la creación de disparadores en la tabla de clientes potenciales para INSERT, UPDATE y DELETE, de manera que se mantiene la columna de la Employees.LeadCount corriente todo el tiempo. Por ejemplo, el uso de sintaxis gatillo MySQL:
CREATE TRIGGER leadIns AFTER INSERT ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount + 1 WHERE employeeID = NEW.employeeID;
END
CREATE TRIGGER leadIns AFTER UPDATE ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount - 1 WHERE employeeID = OLD.employeeID;
UPDATE Employees SET LeadCount = LeadCount + 1 WHERE employeeID = NEW.employeeID;
END
CREATE TRIGGER leadIns AFTER DELETE ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount - 1 WHERE employeeID = OLD.employeeID;
END
Otra opción, si está utilizando MySQL, es utilizar la sintaxis ACTUALIZACIÓN multi-mesa. Esta es una extensión de MySQL para SQL, no es portátil para otras marcas de RDBMS. Primero, restablezca el LeadCount en todas las filas a cero, luego realice un join en la tabla Leads e incremente el LeadCount en cada fila producida por la unión.
UPDATE Employees SET LeadCount = 0;
UPDATE Employees AS e JOIN Leads AS l USING (employeeID)
SET e.LeadCount = e.LeadCount+1;
suma (employeeid) no tiene ningún sentido, y distinto alrededor de un solo valor siempre devolverá el mismo valor, por lo que es redundante. –
IIRC que será realmente lento (MySQL es todo lo que he usado) – BCS