将一个表中列更新为另外表中的列,没有对应关系,怎么更新?

baya 2014-11-12 05:08:01
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列,没有任何对应关系,可以随机更新或顺序更新,但不能重复。求解,谢谢!

...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baya 2014-11-13
  • 打赏
  • 举报
回复
感谢大家的回复!问题解决
baya 2014-11-13
  • 打赏
  • 举报
回复
大家写的都对,谢谢!
还在加载中灬 2014-11-13
  • 打赏
  • 举报
回复
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的话,另外处理
baya 2014-11-13
  • 打赏
  • 举报
回复
谢谢各位!不重复,就是把t2表中10行记录,更新到t1表中10行,不是t1表中更新了10行,却只用了t2表中8行数据
卖水果的net 2014-11-12
  • 打赏
  • 举报
回复
提示一下: 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
xiaodongni 2014-11-12
  • 打赏
  • 举报
回复
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 建立一个对应关系。
还在加载中灬 2014-11-12
  • 打赏
  • 举报
回复
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
你试下
hleb231 2014-11-12
  • 打赏
  • 举报
回复
不重复是什么意思,col3 不是有重复的b
baya 2014-11-12
  • 打赏
  • 举报
回复
要只写一条sql语句,不用循环,谢谢

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧