Sql查询问题(从一个表向另一个表随机添加值)

时间:2018-07-31 09:12:18

标签: sql sql-server

我有两个表AccountsProxies

我现在要在Proxies表中随机分配代理,因此Accounts表中有近100个代理。我正在使用此查询:

update Accounts set proxy= (select top 1 proxy from Proxies order by newid())

但是它会使用相同的代理更新所有行,从理论上看查询,我相信它应该为每行随机获得一个新的代理。

3 个答案:

答案 0 :(得分:3)

这是因为它是不相关的子查询,并且只计算一次。 尝试将其更改为:

update A 
set proxy= (select top 1 proxy from Proxies P WHERE P.proxy-P.proxy=A.proxy-A.proxy order by newid()) 
FROM Accounts A 

http://sqlfiddle.com/#!18/c68ce/4/1

此查询类似于0 = 0,但与优化程序POV相关联

答案 1 :(得分:0)

使用$.parseXML()子句示例

where

答案 2 :(得分:0)

尝试此查询。

UPDATE t1
SET t1.proxy= t2.proxy
FROM Accounts t1
CROSS APPLY (
   SELECT TOP 1 p.proxy
   FROM Proxies p
   WHERE p.proxy= t1.proxy
   ORDER BY newid()
) t2