0

私は2つのテーブルを持ってい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/#!17/313fb/1を参照してください

nonsenseからにランダムな値をコピーしたいと思いますstuff。前の質問への回答を使用して、単一の値に対してこれを行うことができます: SQL 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);

ただし、同じ行から複数​​の値 ( dataand 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が、単純に置き換えるだけではうまくいきません。

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

4

1 に答える 1

4

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

update stuff
set (data, more) = (
  select data, more
  from nonsense
  where stuff.id=stuff.id
  order by random()
  limit 1
);
于 2017-07-30T01:37:33.627 に答える