В Postgres У меня есть 3 таблицы, которые соединены двумя ключами:значения обновления в колонке на основе сравнения двух других таблиц
ключ A соединяет таблицы 1 и 2, не является уникальным в таблице 1, является уникальным в таблице 2 и не существует в таблице 3
Key B соединяет таблицы 2 и 3 не существует в таблице 1 и является уникальным в таблицах 2 и 3.
Я ищу, чтобы обновить столбец в таблице 3, которая должна содержать количество записей в таблице 1 (все значения в этом столбце равны 0).
Table_1
+-----+
| Key |
+-----+
| A1 |
| A1 |
| A1 |
| A2 |
| A2 |
| A3 |
| A3 |
+-----+
Table_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$