2017-07-29 16 views
0

私は2つのテーブルstuffnonsenseを持っています。 nonsensestuffと同じサイズではありません。この場合、行は少なくなりますが、それ以上の行がある可能性があります。SQL Server Copyランダムなデータをあるテーブルから別のテーブルに移動

構造はこのようなものです:

CREATE TABLE stuff (
    id INT PRIMARY KEY, 
    details VARCHAR(MAX), 
    data VARCHAR(MAX) 
); 

CREATE TABLE nonsense (
    id INT PRIMARY KEY, 
    data VARCHAR(MAX) 
); 

stuffテーブルがすでにdetailsが移入されていますが、dataは今のNULLです。

Iはstuffの各行にランダムでnonsenseの行からデータをコピーしたいです。 nonsenseが小さいので、当然のことながら重複していますが、これは問題ありません。

UPDATE stuff 
SET data=(SELECT TOP 1 data FROM nonsense ORDER BY NewId()); 

おそらく、サブクエリがクエリの残りの部分の前に一度だけ評価されています

これはない作業を行います。しかし、それは私が好きだった結果のようなものです。

これはどのようにして達成できますか?

+0

*これは機能しません。*データ列のすべてのレコードに対して同じ値が更新されていますか? –

答えて

1

各レコードに対してサブクエリを実行するには、サブクエリを相互に関連付ける必要があります。

UPDATE stuff 
SET data=(SELECT TOP 1 data 
      FROM nonsense 
      where stuff.id = stuff.id --here 
      ORDER BY NewId()); 
+0

ブリリアント!それはどのように機能するのですか?それはある種の魔法ですか? – Manngo

+0

@Manngo - where句は、各行に対してサブクエリを実行させる –

関連する問題