SQL根据其他2个表中的信息更新表

时间:2013-04-10 18:42:14

标签: sql oracle10g

我目前正在使用3个表。 USERWORKSTATIONUSER_WORKSTATION(基本上是临时表)。

我的

USER表格包含user_iduser_name

WORKSTATIONworkstation_idworkstation_nameuser_id组成。

截至目前,user_id列对于所有工作站都是空的,这是我的问题。

我创建了一个表(从excel导入)USER_WORKSTATION。它仅包含user_name个及其相应的工作站。在某种程度上,我可以编写一个更新查询,根据WORKSTATIONuser_id更新USERuser_name表中的workstation_nameUSER_WORKSTATION表中的组合?我目前没有设置任何限制,我正在使用Oracle。

2 个答案:

答案 0 :(得分:1)

您可以使用MERGE语句:

MERGE
INTO    WORKSTATION W1
USING   (SELECT W2.rowid AS rid, U.user_id
           FROM USER_WORKSTATION UW
           JOIN USER U
             ON UW.user_name = U.user_name
           JOIN WORKSTATION W2
             ON UW.workstation_name = W2.workstation_name
        ) q
ON      (W1.rowid = q.rid)
WHEN MATCHED THEN
UPDATE
SET W1.user_id = q.user_id;

你也可以做UPDATE,这有点麻烦。

请参阅Update statement with inner join on Oracle

答案 1 :(得分:0)

您好试试这个plsql块。    我假设一个用户一个工作站。

Declare
user_id User.userid%type;
ws_name WorkStationUser.wsname%type;
Cursor WSUSER is select * from WorkStationUser;
user_name WorkStationUser.username%type;

Begin

Open WSUSER;


Loop
 Fetch WSUSER into user_name, ws_name;
 select userid into user_id from USER where username=user_name;
 select wsname into ws_name from WORKSTATIONUSER where username=user_name;
 update WORKSTATION set userid=user_id whrer wsname=ws_name;
 EXIT WHEN WSUSER%notfound;
END LOOP;
close WSUSER;
END;