Sql 在另一个表中插入行时,如何自动增加一个表中的值
我目前有两个表:Sql 在另一个表中插入行时,如何自动增加一个表中的值,sql,postgresql,triggers,auto-increment,sql-view,Sql,Postgresql,Triggers,Auto Increment,Sql View,我目前有两个表: 表1具有唯一的ID和计数 表2有一些数据列和一列,其中表1的唯一ID值在其中 当我在表2中插入一行数据时,表1中引用的唯一id所在行的计数应增加。 希望我说清楚。一般来说,我对PostgreSQL和SQL都很陌生,因此我非常感谢您为我提供的帮助 您可以通过以下方式实现这一点。 如果需要,请确保适当地覆盖所有类型的写访问插入,更新,删除 还要注意,表2上的TRUNCATE或表1中的手动编辑可能会破坏数据完整性 我建议您考虑用一个替代的方法来返回聚合的结果,这些结果会自动更新。比如
表1
具有唯一的ID和计数
表2
有一些数据列和一列,其中表1
的唯一ID值在其中
当我在表2中插入一行数据时,表1中引用的唯一id所在行的计数应增加。
希望我说清楚。一般来说,我对PostgreSQL和SQL都很陌生,因此我非常感谢您为我提供的帮助 您可以通过以下方式实现这一点。
如果需要,请确保适当地覆盖所有类型的写访问<代码>插入
,更新
,删除
还要注意,表2上的TRUNCATE
或表1中的手动编辑可能会破坏数据完整性
<>我建议您考虑用一个替代的方法来返回聚合的结果,这些结果会自动更新。比如:
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)
如果使用左联接
,则会包括tbl1
的所有行,即使tbl2
中没有引用。使用常规的联接
,这些行将从视图中被忽略
对于表的全部或大部分,首先在子查询中聚合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!
非常感谢欧文!(=