如何用另一个表中的另一行替换表中的行?

时间:2016-11-30 20:00:16

标签: sql windows oracle

我在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完全相同,这就是我加入它们的原因,但是我想将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

所以我想将User_Name中的值替换为OPENID

中的相应值

2 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分:1)

如果screenname表中user_不唯一,则该要求没有意义(user_表中的哪一行应该用于更新行中的一行svd,如果screenname不唯一?)

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

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