2016-12-28 3 views
0

したがって、2つの表があり、別の表の項目が追加または削除されると、増分または減分される1つの表に列があります。SQLite増分および減分列の1つの表のトリガー

私は2つのトリガーを持っていますが、動作するかどうかはわかりません。 私は間違っていたり、修正がなくなってしまった場合、正しいツリーを鳴らしているかどうか確認したいと思いますか?

SQL =

CREATE TABLE IF NOT EXISTS Agents(
     Id INTEGER PRIMARY KEY, 
     Name TEXT, 
     Office_Count INT, 
    ); 

    CREATE TABLE IF NOT EXISTS Branches(
     Id INTEGER PRIMARY KEY, 
     Street_Address TEXT, 
     City TEXT, 
     Postcode TEXT, 
     Agents_Id INTEGER, 
     FOREIGN KEY(Agents_Id) REFERENCES Branches(Id) 
    ); 

    CREATE TRIGGER Branches_Count_Increment AFTER INSERT ON Branches 
    BEGIN 
     UPDATE Agents SET 
     Office_Count=(MAX(Office_Count)+ 1 FROM Branches Where Agents_Id=Agents.Id) WHERE Id=NEW.Id; 
    END; 

    CREATE TRIGGER Branches_Count_Decrement AFTER DELETE ON Branches 
    BEGIN 
     UPDATE Agents SET 
     Office_Count=(MAX(Office_Count)- 1 FROM Branches Where Agents_Id=Agents.Id) WHERE Id=NEW.Id; 
    END; 
+0

私はそうしないことをお勧めします。必要に応じてオンザフライでカウントを計算する –

答えて

1

あなたは大丈夫ツリーの一般的な方向に吠えています。

しかし、外側のWHEREは間違ったIDを使用します。エージェントテーブルはエージェントIDを使用する必要があります。NEW.idはそうではありません。 MAXは不要で、サブクエリにはSELECTが必要です。

UPDATE Agents 
SET Office_Count = Office_Count + 1 
WHERE Id = NEW.Agents_Id; 
+0

正しいエージェントゲットが増分されるようにするにはどうすればよいですか?ブランチには対応するagent.idと一致するagent_idがあり、対応するエージェントIDと一致するエージェントのみを増減したい。 – Thermatix

+0

UPDATE文自体が単一のテーブルを扱うので、 'Id'は' Agents.Id'を参照します。 –

+0

ああ、私は、おかげでええと、その逆についてはどうでしょう?減る? NEWはまだそれを考慮していますか? – Thermatix

関連する問題