9

我向需要从同一个 USERS 表填充的 USERS 表添加了一个新列 supervisor_id:

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               | NULL

2    |  jsmith    |  dduck                | NULL

我将如何遍历表以设置 supervisor_id = id,如下所示:

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               |  2

2    |  jsmith    |  dduck                | NULL

我尝试了以下方法,但它显然只设置了 supervisor_id,其中用户的 supervisor_username 是他自己的用户名。

update users
set supervisor_id = id
where supervisor_username = username
4

2 回答 2

22

您可以使用多表UPDATE语法进行自联接:

UPDATE users u
  JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME
SET    u.SUPERVISOR_ID = s.ID

sqlfiddle上查看。

然后,您应该删除SUPERVISOR_NAME违反3NF的列;相反,如果需要,您可以在检索数据时进行另一个自联接:

SELECT u.ID, u.USERNAME, s.USERNAME AS SUPERVISOR_USERNAME, u.SUPERVISOR_ID
FROM   users u LEFT JOIN users s ON s.ID = u.SUPERVISOR_ID

sqlfiddle上查看。

于 2013-07-16T18:57:31.423 回答
4
update Users u
inner join Users temp on
    u.Supervisor_username = temp.UserName
set u.Supervisor_ID = temp.ID
于 2013-07-16T19:08:01.650 回答