我目前有两张桌子:
Table 1
有唯一的ID和计数。
Table 2
包含一些数据列和一列,其中唯一ID Table 1
的值在其中。
当我在Table 2
中插入一行数据时,Table 1
中引用唯一ID的行的计数应递增。
希望我清楚自己。我对PostgreSQL和SQL很新,所以我很感激任何帮助如何做到这一点。 =)
答案 0 :(得分: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)
如果您使用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!