12

私は2つのテーブルを持っています。Table 1には約 80 行あり、Table 2約 1,000 万行あります。

Table 2のすべての行を のランダムな行で更新したいと思いTable 1ます。すべての行に同じ行は必要ありません。更新して、更新Table 2している各行の値をランダムに選択することは可能ですか?

これは私が試したものですが、各行に同じ値が入ります。

update member_info_test
set hostessid = (SELECT TOP 1 hostessId FROM hostess_test ORDER BY NEWID())

**編集済み

4

4 に答える 4

16

わかりました、これは私が書いた中で最も奇妙なクエリの 1 つだと思います。これは非常に遅くなると思います。しかし、試してみてください:

UPDATE A
SET A.hostessid = B.hostessId
FROM member_info_test A
CROSS APPLY (SELECT TOP 1 hostessId
             FROM hostess_test 
             WHERE A.somecolumn = A.somecolumn
             ORDER BY NEWID()) B
于 2012-10-25T20:53:00.747 に答える
1

私はこれがうまくいくと思います(少なくとも、そのwith部分はうまくいきます):

with toupdate as (
      select (select top . . . hostessId from hostess_test where mit.hostessId = mit.hostessId order by newid()) as newval,
             mit.*
      from member_info_test mit
     )
update toupdate
    set hostessid = newval;

これ(およびLamakの)の鍵は、サブクエリの外部相関です。これにより、オプティマイザーが各行に対して実際にクエリを実行するようになります。なぜこれが機能し、他のバージョンが機能しないのかわかりません。

于 2012-10-25T21:10:55.547 に答える
0

ランダム フィールドでテーブルを更新する

UPDATE p
    SET p.City= b.City
    FROM Person p
    CROSS APPLY (SELECT TOP 1 City
                 FROM z.CityStateZip 
                 WHERE p.SomeKey = p.SomeKey and -- ... the magic! ↓↓↓
                 Id = (Select ABS(Checksum(NewID()) % (Select count(*) from z.CityStateZip)))) b
于 2015-05-27T16:45:55.853 に答える
0

これが私が最終的に使用したものです:

EnvelopeInformation は表 2 になります

PaymentAccountDropDown は表 1 になります (私の場合は 3 つの項目がありました) - ユースケースに合わせて 3 を 80 に変更します。

;WITH cteTable1 AS (
    SELECT
        ROW_NUMBER() OVER (ORDER BY NEWID()) AS n,
        PaymentAccountDropDown_Id
    FROM EnvelopeInformation
    ),
cteTable2 AS (
    SELECT 
        ROW_NUMBER() OVER (ORDER BY NEWID()) AS n,
        t21.Id
    FROM PaymentAccountDropDown t21
    )
UPDATE cteTable1
   SET PaymentAccountDropDown_Id = (
       SELECT Id 
       FROM cteTable2
       WHERE  (cteTable1.n % 3) + 1 = cteTable2.n
)

参照: http://social.technet.microsoft.com/Forums/sqlserver/pt-BR/f58c3bf8-e6b7-4cf5-9466-7027164afdc0/updating-multiple-rows-with-random-values-from-another-table

于 2013-09-23T20:25:13.740 に答える