2012-06-01 14 views
0

我有以下查询,它允许我按行号连接两个表,我试图修改它,以便使用随机名称表中的随机名更新订户表。需要在用户表中随机化名称

select fo.*, so.* 
from (select *, 
       row_number() over (order by FirstName) as rn 
     from randomnames 
) fo 
join (select *, 
      row_number() over (order by ID) as rn 
     from subscribers) so on fo.rn = so.rn 

我把它更新到下面,使其工作

update subscribers set 
FirstName = fo.Firstname, 
LastName = fo.LastName 
from 
(select *, 
       row_number() over (order by firstname) as rn 
     from _randomnames 
) fo 
join (select *, 
      row_number() over (order by ID desc) as rn 
     from subscribers) so on fo.rn = so.rn 

     where so.ID = subscribers.ID 

回答

0

尝试以下查询:

;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS rn 
    FROM subscribers 
) 
UPDATE so 
SET so.[Name] = fo.[Name] 
FROM CTE so 
INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY FirstName) AS rn 
      FROM randomnames) fo 
ON fo.rn = so.rn 
+0

我最后想出来的,但因为你回答我接受它。没有真正尝试过,看看它是否工作虽然 – Jhorra

+0

@Jhorra - 我很感激你标记为接受,但你不应该这样做,除非它真的有效,所以它不会混淆未来的读者 – Lamak

+0

@Jhorra:If你找到了你自己的解决方案,你应该发布你的解决方案作为问题的答案。甚至可能接受它。 – Flimzy