2

我目前有两张桌子:

Table 1具有唯一的 ID 和计数。

Table 2有一些数据列和一列,其中唯一 ID 的值Table 1在里面。

当我在 中插入一行数据时Table 2,具有引用的唯一 id 的行的计数Table 1应该增加。
希望我说清楚了。总的来说,我对 PostgreSQL 和 SQL 非常陌生,所以我将不胜感激如何做到这一点。=)

4

1 回答 1

2

您可以使用triggers来实现。
如果您这样做,请确保适当地涵盖所有类型的写访问。INSERT, UPDATE, DELETE.
另请注意,TRUNCATE打开Table 2或手动编辑Table 1可能会破坏数据完整性。

我建议您考虑VIEW改为返回自动更新的聚合结果。像:

CREATE VIEW tbl1_plus_ct AS
SELECT t1.*, t2.ct
FROM   tbl1 t1
LEFT JOIN  (
   SELECT tbl1_id, count(*) AS ct
   FROM   tbl2
   GROUP  BY 1
   ) t2 USING (tbl1_id)

如果您使用 a LEFT JOIN,则包含 的所有行tbl1,即使 中没有引用也是如此tbl2。使用常规JOIN,这些行将从VIEW.

对于表的全部或大部分,tbl2首先在子查询中聚合,然后加入到tbl1- 就像上面演示的那样,是最快的。

除了创建视图之外,您还可以直接使用查询,如果您只获取一行或几行,这种替代形式会表现得更好:

SELECT t1.*, count(t2.tbl1_id) AS ct
FROM   tbl1 t1
LEFT   JOIN  tbl2 t2 USING (tbl1_id)
WHERE  t1.tbl1_id = 123  -- for example
GROUP  BY t1.tbl1_id     -- being the primary key of tbl1!
于 2013-08-14T10:27:10.600 回答