【发布时间】:2017-03-24 20:35:16
【问题描述】:
在 postgres 中,我有 3 个由两个键连接的表:
键A连接表1和表2,在表1中不唯一,在表2中唯一,在表3中不存在
Key B 连接表 2 和表 3,表 1 中不存在,在表 2 和表 3 中是唯一的。
我希望更新表 3 中的一列,该列应包含表 1 中的记录计数(该列中的所有值都是 0)。
表_1
+-----+
| Key |
+-----+
| A1 |
| A1 |
| A1 |
| A2 |
| A2 |
| A3 |
| A3 |
+-----+
表_2
+-------+-------+
| Key_A | Key_B |
+-------+-------+
| A1 | B1 |
| A2 | B2 |
| A3 | B3 |
+-------+-------+
Table_3(期望的结果)
+-------+--------+
| Key_B | Count |
+-------+--------+
| B1 | 3 |
| B2 | 2 |
| B3 | 2 |
+-------+--------+
我被更新命令卡住了(对它们还不够熟悉),我有我需要的计数:
Select Table_3.Key_B, count(Table_1.*)
from Table_1
Join Table_2 on Table_1.Key_A = Table_2.Key_A
Join Table_3 on Table_2.Key_B = Table 3.Key_B
Group by 1
我只是不太确定如何使用正确的计数更新表 3 中的记录。我想我可能需要一个功能,但我不确定。这是在正确的轨道上吗?
Create or replace function my_funct
returns varchar as
$body$
Declare
r record
begin
select key_B from Table_3 into r;
update Table_3
set count = (
select count(*)
from table_1
Join Table_2 on Table_1.Key_A = Table_2.Key_A
Join Table_3 on Table_2.Key_B = Table 3.Key_B
Where key_B = r
);
end
$body$
【问题讨论】:
标签: sql postgresql sql-function