我在USERS表中添加了一个新列supervisor_id,我需要从同一个USERS表填充:
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
答案 0 :(得分:14)
您可以使用多表UPDATE
语法进行自联接:
UPDATE users u
JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME
SET u.SUPERVISOR_ID = s.ID
在sqlfiddle上查看。
然后,您应该删除违反3NF的SUPERVISOR_NAME
列;相反,如果需要,您可以在检索数据时进行另一次自联接:
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上查看。
答案 1 :(得分:2)
update Users u
inner join Users temp on
u.Supervisor_username = temp.UserName
set u.Supervisor_ID = temp.ID