PostGresql: копировать данные из случайной строки другой таблицы
У меня есть две таблицы, stuff
а также nonsense
,
create table stuff(
id serial primary key,
details varchar,
data varchar,
more varchar
);
create table nonsense (
id serial primary key,
data varchar,
more varchar
);
insert into stuff(details) values
('one'),('two'),('three'),('four'),('five'),('six');
insert into nonsense(data,more) values
('apple','accordion'),('banana','banjo'),('cherry','cor anglais');
Смотрите http://sqlfiddle.com/
Я хотел бы скопировать случайные значения из nonsense
в stuff
, Я могу сделать это для одного значения, используя ответ на мой предыдущий вопрос: SQL Server Копировать случайные данные из одной таблицы в другую:
update stuff
set data=(select data from nonsense where stuff.id=stuff.id
order by random() limit 1);
Тем не менее, я хотел бы скопировать более одного значения (data
а также more
) из той же строки, и подзапрос не позволит мне сделать это, конечно.
Я Microsoft SQL, я могу использовать следующее:
update stuff
set data=sq.town,more=sq.state
from stuff s outer apply
(select top 1 * from nonsense where s.id=s.id order by newid()) sq
Я читал, что PostGresql использует что-то вроде LEFT JOIN LATERAL
вместо OUTER APPPLY
, но простая замена не работает для меня.
Как я могу обновить несколько значений из случайной строки другой таблицы?
1 ответ
Начиная с Postgres 9.5, вы можете назначить несколько столбцов из подзапроса:
update stuff
set (data, more) = (
select data, more
from nonsense
where stuff.id=stuff.id
order by random()
limit 1
);