将字段设置为另一个表中的随机值

jPo*_*l34 2 sql-server sql-server-2008

update table1
set firstname = (select top 1 firstname from table2 order by NEWID())
Run Code Online (Sandbox Code Playgroud)

这只是将 table1.firstname 设置为所有记录的相同值。我知道这样做是可能的,但是我在网上看到的所有内容都希望两个表中的行数相同(或者至少表 1 中的行数更多)。我在表 1 中有 200,000 条记录,在表 2 中有 200 条记录。当行计数关闭时,如何将 table1.firstname 设置为 table2.firstname 中的随机值?

Dev*_*art 5

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
Run Code Online (Sandbox Code Playgroud)

输出 -

b           c
----------- -----------
0           5
1           1
2           0
Run Code Online (Sandbox Code Playgroud)

  • @GiorgosBetsos 当然,我只是指出一个问题,所以 op 在运行此查询之前就知道它 (2认同)