MySQL更新列来自同一表中的其他列

Kat*_*e M 4 mysql

我在USERS表中添加了一个新列supervisor_id,我需要从同一个USERS表填充:

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               | NULL

2    |  jsmith    |  dduck                | NULL
Run Code Online (Sandbox Code Playgroud)

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

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               |  2

2    |  jsmith    |  dduck                | NULL
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容,但显然只设置了supervisor_id,其中用户的supervisor_username是他自己的用户名.

update users
set supervisor_id = id
where supervisor_username = username
Run Code Online (Sandbox Code Playgroud)

egg*_*yal 15

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

UPDATE users u
  JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME
SET    u.SUPERVISOR_ID = s.ID
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它.