This question already has answers here:
Copy values from one column to another in the same table

(7个答案)


7年前关闭。




我在需要从同一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_username是他自己的用户名的情况下设置supervisor_id。
update users
set supervisor_id = id
where supervisor_username = username

最佳答案

您可以使用多表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上看到它。

10-08 09:36