SQLite 在一个 table 上触发,用于递增和递减列其他 table
SQLite Trigger on one table for increment and decrement column other table
所以我有两个 table,我想在一个 table 上增加或减少一个列,因为另一个 table 上的项目被添加或删除, link 是外键。
我有两个触发器,但不确定它们是否有效。
所以我想确认一下我是否在寻找正确的树,如果我做错了或没有任何修复改进?
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;
你正朝着一棵好树的大致方向吠叫。
但是外部 WHERE 使用了错误的 ID:代理 table 必须使用代理 ID,而 NEW.id
则不是。
并且不需要 MAX,子查询需要 SELECT.
UPDATE Agents
SET Office_Count = Office_Count + 1
WHERE Id = NEW.Agents_Id;
所以我有两个 table,我想在一个 table 上增加或减少一个列,因为另一个 table 上的项目被添加或删除, link 是外键。
我有两个触发器,但不确定它们是否有效。 所以我想确认一下我是否在寻找正确的树,如果我做错了或没有任何修复改进?
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;
你正朝着一棵好树的大致方向吠叫。
但是外部 WHERE 使用了错误的 ID:代理 table 必须使用代理 ID,而 NEW.id
则不是。
并且不需要 MAX,子查询需要 SELECT.
UPDATE Agents
SET Office_Count = Office_Count + 1
WHERE Id = NEW.Agents_Id;