如何用另一个表中的另一行replace表中的一行?

我在SQL上有以下代码:

select u.openid, u.screenname, svd.user_name from gw_svd_prefix_assignment svd join user_ u on u.screenname = svd.USER_NAME; 

现在它将显示三行,screenname,user_name和openID。 screenname和user_name是完全相同的,这就是为什么我join了它们,但是我想把user_name改成openID的值,这是不同的。

我怎么能这样做?

编辑下面是一个例子:

 OPENID SCREENNAME USER_NAME ========================================== Smith.A Smith.Alan Smith.Alan Someone.J Someone.Juan Someone.Juan Foo.V Foo.Vallery Foo.Vallery Hee.L Hee.Lee Hee.Lee 

我希望桌子看起来像:

 OPENID SCREENNAME USER_NAME ========================================== Smith.A Smith.Alan Smith.A Someone.J Someone.Juan Someone.J Foo.V Foo.Vallery Foo.V Hee.L Hee.Lee Hee.L 

所以我想用OPENID中的相应的值replaceUser_Name中的值

如果screennameuser_表中不是唯一的,那么这个要求是没有意义的(如果screenname不唯一, user_表中的哪一行应该用来更新svd的一行?)

如果screenname 唯一的,那么更新可以非常容易地完成,如下所示,但这需要screenname (或主键约束)上的UNIQUE约束。 如果当前不存在某个约束,则可以使用ALTER TABLE ... ADD CONSTRAINT ...语句ALTER TABLE ... ADD CONSTRAINT ...

 update ( select user_name, openid, screenname from svd join usr on svd.user_name = usr.screenname ) set user_name = openid; 

尝试这个

select u.openid, u.screenname, u.openid user_name from gw_svd_prefix_assignment svd join user_ u on u.screenname = svd.USER_NAME;