2017-07-30 60 views
0

的随机行中复制数据我有两个表,stuffnonsensePostgreSQL的:从另一个表

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/#!17/313fb/1

我想随机值复制从nonsensestuffSQL Server Copy Random data from one table to another:我可以用回答我刚才的问题单个值做到这一点

update stuff 
set data=(select data from nonsense where stuff.id=stuff.id 
    order by random() limit 1); 

不过,我想从同一行复制多个值(datamore),和子查询当然不会让我这样做。

我微软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,但简单地替代并不为我工作。

我怎么能与多个值从另一个表中的随机行更新?

回答

2

对于Postgres 9.5,你可以从一个子查询分配多个列:

update stuff 
set (data, more) = (
    select data, more 
    from nonsense 
    where stuff.id=stuff.id 
    order by random() 
    limit 1 
);