2016-05-26 3 views
0

Ich habe zwei Tabellen: Kunde (id, name, advisorID) und Angestellter (id, name, MANAGERID)sqlite trigger on delete aktualisieren Tupel mit Wert aus einer anderen Tabelle?

Wenn ein Mitarbeiter aus der Tabelle Mitarbeiter gelöscht wird, wie Trigger zu machen, dass Update Kunden advisorID zu der Wert der gelöschten Mitarbeiter managerID?

Bisher habe ich:

CREATE TRIGGER updateAdvisor BEFORE DELETE ON Employee 
    BEGIN 
     UPDATE Customer set Customer.advisorID = Employee.managerID 
     from Employee 
     WHERE Employee.managerID IN(
      SELECT managerID 
      FROM Employee) 

Danke für die Hilfe !!

+0

Das macht wenig Sinn WHERE Employee.managerID IN ( SELECT MANAGERID FROM Employee) '. Es wird offensichtlich für alle Angestelltenaufzeichnungen zutreffend sein. Die Frage ist: Was ist die Verbindung zwischen einem Mitarbeiterdatensatz und einem Kundendatensatz? Sie teilen die gleiche ID? Oder wie sind sie verbunden? – trincot

+0

Die Mitarbeiter-ID in Mitarbeiter ist die Berater-ID in Kunde. Machen Sie mehr Sinn @trincot – Jupiter

Antwort

1

Die UPDATE-Anweisung funktioniert auf einer einzigen Tabelle; Sie müssen den neuen Wert mit einem correlated subquery nachschlagen:

UPDATE Customer 
SET advisorID = (SELECT managerID 
       FROM Employee 
       WHERE Employee = OLD.EmployeeID) 
... 

Außerdem Sie nur die Kunden aktualisieren möchten, die tatsächlich die zu-Lösch Mitarbeiter als Berater haben:

... 
WHERE advisorID = OLD.EmployeeID; 
0

Das funktionierte groß!

CREATE TRIGGER updateAdvisor BEFORE DELETE ON employee 
BEGIN 
UPDATE customer 
SET advisorID = (SELECT managerID FROM employee WHERE employeeID = old.employeeID) 
WHERE advisorID = old.employeeID; 
END; 
Verwandte Themen