我目前有两张桌子:
Table 1具有唯一的 ID 和计数。
Table 2有一些数据列和一列,其中唯一 ID 的值Table 1在里面。
当我在 中插入一行数据时Table 2,具有引用的唯一 id 的行的计数Table 1应该增加。
希望我说清楚了。总的来说,我对 PostgreSQL 和 SQL 非常陌生,所以我将不胜感激如何做到这一点。=)
我目前有两张桌子:
Table 1具有唯一的 ID 和计数。
Table 2有一些数据列和一列,其中唯一 ID 的值Table 1在里面。
当我在 中插入一行数据时Table 2,具有引用的唯一 id 的行的计数Table 1应该增加。
希望我说清楚了。总的来说,我对 PostgreSQL 和 SQL 非常陌生,所以我将不胜感激如何做到这一点。=)
您可以使用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!