2017-07-30 22 views
0

私は2つのテーブルstuffnonsenseを持っています。PostGresql:別のテーブルのランダムな行からデータをコピーする

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'); 

私はnonsenseからstuffにランダムな値をコピーしたいhttp://sqlfiddle.com/#!17/313fb/1

を参照してください。私は同じ行から複数​​の値(datamore)をコピーしたいと思います、しかし

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

、およびサブクエリ:SQL Server Copy Random data from one table to another:私は私の前の質問への回答を使用して単一の値のためにこれを行うことができますもちろん、私にそれをさせません。

私は、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の代わりにOUTER APPPLYLEFT JOIN LATERALのようなものを使用しますが、単純に置き換えることは私のために動作しないことを読みました。

別のテーブルのランダムな行から複数​​の値を更新するにはどうすればよいですか?

答えて

2

のPostgres 9.5の時点で、あなたはサブクエリから複数の列を割り当てることができます。

update stuff 
set (data, more) = (
    select data, more 
    from nonsense 
    where stuff.id=stuff.id 
    order by random() 
    limit 1 
); 
関連する問題