2017-07-30 58 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 
);