0

我有 2 个表,Organization 和 State(它在哪里)。每个组织都有一个状态。我现在想为表 State 实现一个 Integer 列,该列跟踪其中有多少组织。有点像每当一个新组织被插入到 Organizations 表中时,更新相应 State 表中的整数列,其中 org.state_id = state_id。

这可以使用触发器吗?

4

2 回答 2

2

与其跟踪计算列,不如只根据需要计算所需的内容。因此,如果您有这两个表:

organization(id, name, state_id)

state(id, name)

如下查询获取计数:

SELECT s.name, COUNT(*) AS organization_count
  FROM state s JOIN organization o ON (s.id = o.state_id)
  GROUP BY s.name

这避免了完整性问题。如果您正在处理数十万条记录或在报告环境中操作,那么您可能需要考虑计算信息。

于 2012-08-20T18:40:02.677 回答
1

我同意Glenn 的回答,即在所有条件相同的情况下,按需是一个更好的解决方案,但答案是,是的,它可以通过触发器来完成。非常简单地。

CREATE TRIGGER organization_trigger_insert AFTER INSERT ON organization
    FOR EACH ROW BEGIN
        UPDATE state SET total = total + 1 WHERE NEW.state_id = state_id;
    END;

CREATE TRIGGER organization_trigger_delete BEFORE DELETE ON organization
    FOR EACH ROW BEGIN
        UPDATE state SET total = total - 1 WHERE OLD.state_id = state_id;
    END;

演示

于 2012-08-20T18:47:11.770 回答