【问题标题】:How to auto increment a value in one table when inserted a row in another table在另一个表中插入一行时如何自动增加一个表中的值
【发布时间】:2013-08-16 05:51:17
【问题描述】:

我目前有两张桌子:

Table 1 具有唯一 ID 和计数。

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

当我在Table 2 中插入一行数据时,Table 1 中引用的唯一 id 行的计数应该增加。
希望我说清楚了。总的来说,我对 PostgreSQL 和 SQL 很陌生,所以如果能提供任何帮助,我将不胜感激。 =)

【问题讨论】:

    标签: sql postgresql triggers auto-increment sql-view


    【解决方案1】:

    您可以通过 triggers 实现这一目标。
    如果您这样做,请务必适当地涵盖所有类型的写访问。 INSERT, UPDATE, DELETE.
    另请注意,Table 2 上的 TRUNCATETable 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!
    

    【讨论】:

    • 非常感谢欧文! (=
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2021-09-17
    • 2021-07-16
    • 2020-03-31
    相关资源
    最近更新 更多