当前位置: 代码迷 >> Sql Server >> 将一个表中列更新为另外表中的列,没有对应关系,如何更新
  详细解决方案

将一个表中列更新为另外表中的列,没有对应关系,如何更新

热度:99   发布时间:2016-04-24 09:43:36.0
将一个表中列更新为另外表中的列,没有对应关系,怎么更新?
t1 t2
col1 col2 col3
1 q m2332
2 q b
3 q b
4 q b
5 q b
6 q a
7 q d
8 q e


t1更新后
col1 col2
1 m2332
2 b
3 b
4 b
5 b
6 a
7 d
8 e

 将t1表中的col2列,更新为t2表中的col3列,没有任何对应关系,可以随机更新或顺序更新,但不能重复。求解,谢谢!


------解决思路----------------------
不重复是什么意思,col3 不是有重复的b
------解决思路----------------------
UPDATE temp1
SET temp1.col2=temp2.col3
FROM(SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN,* FROM t1)temp1
LEFT JOIN (SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN,* FROM t2)temp2 ON temp1.RN=temp2.RN
你试下
------解决思路----------------------
update a set a.col2=b.col3 

from (select *,row_number()over(order by newid()) as rn  from t1) as a 
join (select *,row_number()over(order by newid()) as  rn from t2 )as b 
on a.rn=b.rn 
试试这个,自己通过RN 建立一个对应关系。
------解决思路----------------------
提示一下:
1. t2 表中如果存在 col2 是重复的,你需要 group by ,或 distinct 一下。
2. t2 表中的不重复数据,是否比t1 的行数要多?


update y 
set y.col2 = x.col2
from 
(select ROW_NUMBER() over(order by id ) rn , * from t1) y , 
(select ROW_NUMBER() over(order by col2 ) rn , col2 from t2 group by col2 ) x 
where x.rn = y.rn

------解决思路----------------------
UPDATE temp1
SET temp1.col2=temp2.col3
FROM(SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN,* FROM t1)temp1
    JOIN (SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN,* FROM t2)temp2 ON temp1.RN=temp2.RN

那就内连接,t2有多少就更新多少行到t1去
SQL2005+有效,SQL2000的话,另外处理
  相关解决方案