MYSQL 用条件更新同一个表的列

Muh*_*ali 2 mysql sql

我有一个这样的表,实际上我需要用 id 而不是 name 更新上级列

通过使用 mysql UPDATE 查询

实际表

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERIOR  
1    |  jdoe      |  jsmith               | NULL   
2    |  jsmith    |  dduck                | NULL    
3    |  ANU       |  jsmith               | jdoe  
4    |  JOHN      |  dduck                | jdoe
5   |  NIKHIL     |  jsmith               | jsmith
6   |  JOSE       |  dduck                | jsmith
Run Code Online (Sandbox Code Playgroud)

预期结果表

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERIOR    
1    |  jdoe      |  jsmith               | NULL    
2    |  jsmith    |  dduck                | NULL   
3    |  ANU       |  jsmith               | 1    
4    |  JOHN      |  dduck                | 1    
5   |  NIKHIL     |  jsmith               | 2    
6   |  JOSE       |  dduck                | 2
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 6

使用带有自连接的更新:

UPDATE yourTable t1
INNER JOIN yourTable t2
    ON t1.SUPERIOR = t2.USERNAME
SET t1.SUPERIOR = t2.ID
Run Code Online (Sandbox Code Playgroud)

请注意,此更新不会触及具有NULL上级的记录,但这应该是可以接受的,因为这些记录保留NULL在您的预期输出中。