2016-05-26 12 views
0

私は2つのテーブルがあります。 お客様(ID、名前、advisorID)と 従業員(ID、名前、マネージャーID)従業員がテーブル従業員から削除され削除時にsqliteトリガーが別のテーブルの値を持つタプルを更新しますか?

を、トリガーを作成するにはどのよう更新カスタマーadvisorIDへ削除された従業員のmanagerIDの値は?

これまでのところ私が持っている:助けるため

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) 

感謝を!

+0

これはほとんど意味 'Employee.managerID IN(従業員FROM SELECTマネージャーID を)'ます。すべての社員の記録に当てはまることは明らかです。問題は、従業員レコードと顧客レコードの間のリンクは何か。彼らは同じIDを共有していますか?またはそれらはどのようにリンクされていますか? – trincot

+0

従業員のEmployeeIDは顧客のadvisorIDです。もっと理にかなって@trincot – Jupiter

答えて

1

UPDATEステートメントは単一のテーブルで機能します。あなたはcorrelated subqueryで新しい値を検索する必要があります。これは働いていた

... 
WHERE advisorID = OLD.EmployeeID; 
0

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

さらに、あなたが実際に顧問としての-削除する従業員をしている顧客だけを更新したいですすばらしいです!

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; 
関連する問題