让我说我有
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
触发..我的触发器。
答案 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 ...