如何在PostgreSQL中的每一行上应用一个过程(不是触发器)

时间:2017-06-21 09:34:56

标签: postgresql

让我说我有

T1

 a | b  | t2_a
---+----+------
 1 | 10 |
 2 | 11 |
 3 | 12 |
 4 | 14 |
 5 | 16 |

t2_a中的所有值都为空,我只是添加了列)

t2

 a | b
---+----
 1 | 11
 2 | 12
 3 | 13
 4 | 16

t1.b不在t2.b时,我需要在 t2 中添加一个新行,所以在程序之后, t2 变为:

 a | b  
---+----
 1 | 11
 2 | 12
 3 | 13
 4 | 16
 5 | 10
 6 | 14

现在我需要更新 t1 以满足此条件(t1.t2_a=t2.a AND t1.b=t2.b),因此在 t1 程序变为:

之后
 a | b  | t2_a
---+----+------
 1 | 10 |   5
 2 | 11 |   1
 3 | 12 |   2
 4 | 14 |   6
 5 | 16 |   4

我不需要算法,我只需要知道什么是可用的PostgreSQL机制来在表的每一行上执行这样的更改。

我想我会在 t1 更新之前或之后制作触发器和PostgreSQL程序,但我没有更新任何内容,我想我不能写UPDATE t1触发..我的触发器。

1 个答案:

答案 0 :(得分:2)

我假设列+---------+----------+-------+ | Product | UnitSold | Date | +---------+----------+-------+ | bag | 1 | 1 jun | | purse | 3 | 3 jun | | shirt | 6 | 3 jun | +---------+----------+-------+ 在两个表中都是连续的。

第一项操作是a

insert ... select ...

另一种用途insert into t2(b) select b from t1 where not exists ( select 1 from t2 where t2.b = t1.b) returning *; a | b ---+---- 5 | 10 6 | 14 (2 rows)

update ... from ...