2016-03-23 13 views
2
update table1 
set firstname = (select top 1 firstname from table2 order by NEWID()) 

これは、table1.firstnameをすべてのレコードに対して同じ値に設定するだけです。私はそれが可能であることを知っているが、私がオンラインで見たことは両方のテーブル(または少なくともtable1のより大きい量)で同じ行数を期待しています。私はtable1に200,000レコード、私はtable2に200を持っています。行数がオフの場合、table1.firstnameをtable2.firstnameからランダムな値に設定するにはどうすればよいですか?フィールドを別のテーブルからランダム値に設定する

+0

は、TABLE1には主キーを持っているのでしょうか? – Lamak

+1

あなたの右辺の式は一度しか評価されません。私のテストではdevartsの回答 – TheGameiswar

答えて

4
DECLARE @t1 TABLE (a INT) 
DECLARE @t2 TABLE (b INT, c INT) 

INSERT INTO @t1(a) 
VALUES (0), (1), (2), (3), (4), (5) 

INSERT INTO @t2(b) 
VALUES (0), (1), (2) 

UPDATE t2 
SET c = t1.a 
FROM @t2 t2 
CROSS APPLY (
    SELECT TOP(1) t1.a 
    FROM @t1 t1 
    WHERE t2.b IS NOT NULL -- any calculations for t2 columns 
    ORDER BY NEWID() 
) t1 

SELECT * FROM @t2 

出力 -

b   c 
----------- ----------- 
0   5 
1   1 
2   0 
+0

のように相関関係を調べる必要があります。このフィルタの列は使えません: 'WHERE t2.b IS NOT NULL'、それはユニークなものでなければなりません – Lamak

+1

@Lamak私は彼がそのようなフィールドが存在しない場合に 'ROW_NUMBER'を使うことができると思います。 –

+2

@GiorgosBetsos確かに、私は問題を指しているので、opはこのクエリを実行する前にそれを認識しています。 – Lamak

関連する問題