Member 13453926 Ответов: 1

Я ищу правильную команду обновления.


Я ищу правильную команду обновления для обновления таблицы tmp.x так, чтобы в столбце tmp.x.t эти две даты ('08.12.2017','03.12.2017') из tmp.y.p были добавлены в текстовый массив []. И это только тогда, когда tmp.x.n = tmp.y.n и tmp.x.v = tmp.y.v.

http://sqlfiddle.com/#!15/53eb3/1 [^]

Что я уже пробовал:

update 
	tmp.x
set 
	t = array_append(tmp.x.t,tmp.y.p)
from 
	tmp.y
where 
	tmp.x.n = tmp.y.n
and
	tmp.x.v = tmp.y.v;

1 Ответов

Рейтинг:
2

RickZeeland

Проблема может заключаться в том, что sqlfiddle не поддерживает эту функциональность.
Схемы, похоже, не поддерживаются, но вы можете попробовать вот так:

create table tmpx (n text, v text, t text[]);
create table tmpy (n text, v text, p text);
delete from tmpx;
delete from tmpy;
insert into tmpx values ('android.apps', '3.1.4', null);
insert into tmpy values ('android.apps', '3.1.4', '08.12.2017');
insert into tmpy values ('android.apps', '3.1.4', '03.12.2017');

UPDATE tmpx set t = sub.t 
FROM (select array_agg(p) as t 
      from tmpy,tmpx where tmpx.n = tmpy.n and tmpx.v = tmpy.v) AS sub;

select * from tmpx;

Также вам нужно выбрать PostgreSQL 9.6 вместо 9.3


Member 13453926

В качестве примера я использовал sqlfiddle. Я попробовал это также в postgresql с моими реальными данными, но безуспешно. Мне кажется, что обновление не может обновить одну и ту же строку несколько раз в целевой таблице.

RickZeeland

Обновил ответ с помощью функции ARRAY_AGG (), см.: https://www.postgresqltutorial.com/postgresql-aggregate-functions/postgresql-array_agg-function/