2017-07-30 2 views
0

Ich habe zwei Tabellen, stuff und nonsense.PostGresql: Kopieren von Daten aus einer zufälligen Zeile einer anderen Tabelle

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

Siehe http://sqlfiddle.com/#!17/313fb/1

Ich möchte Zufallswerte nonsense-stuff kopieren. Ich kann für einen einzigen Wert das tut die Antwort auf meine vorherige Frage mit: 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); 

Allerdings würde ich mehr als einen Wert kopieren mag (data und more) aus der gleichen Zeile, und die Sub-Abfrage Lass mich das natürlich nicht machen.

ich Microsoft SQL kann ich folgendes verwenden:

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 

Ich habe gelesen, dass PostGreSQL so etwas wie LEFT JOIN LATERAL statt OUTER APPPLY verwendet, sondern einfach ersetzt für mich nicht funktioniert.

Wie kann ich mit mehreren Werten aus einer zufälligen Zeile einer anderen Tabelle aktualisieren?

Antwort

2

Ab Postgres 9.5 können Sie mehrere Spalten aus einer Unterabfrage zuweisen:

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