This question already has answers here:
Copy values from one column to another in the same table
(7个答案)
7年前关闭。
我在需要从同一USERS表填充的USERS表中添加了新列supervisor_id:
我将如何遍历表以设置supervisor_id = id,如下所示:
我尝试了以下操作,但是它显然仅在用户的supervisor_username是他自己的用户名的情况下设置supervisor_id。
在sqlfiddle上看到它。
然后,您应该删除
在sqlfiddle上看到它。
(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