0

我目前正在使用 3 张桌子。USER,WORKSTATIONUSER_WORKSTATION(基本上是一个临时表)。

我的

USER表由user_iduser_name组成

WORKSTATION由和组成workstation_id_workstation_nameuser_id

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

我创建了一个表(从 excel 导入)USER_WORKSTATION。它仅由user_names 及其相应的工作站组成。有没有办法我可以编写一个更新查询,该查询将根据WORKSTATION表中的and组合使用在表中user_id找到的更新表?我目前没有设置任何约束,我正在使用 Oracle。USERuser_nameworkstation_nameUSER_WORKSTATION

4

2 回答 2

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,它有点混乱。

请参阅Oracle 上使用内部联接的更新语句

于 2013-04-10T19:12:21.930 回答
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;
于 2013-04-10T19:21:11.637 回答