2017-08-08 87 views
-1

我有一个奇怪的问题。基于两列的更新列

我有一个相当大的数据库与两个表。我需要将列的内容从名称更改为另一个表中已存在的ID。

例子:

我有一个包含一列“名称”

名称列具有人“姓氏,名字”,如图

 Name | othercolumn 
Smith, John | 

我想换一个表名称列的内容添加到与人员名称关联的staffID。

工作人员表

staffID | firstName | lastName 
    1   john  smith 

我的最终结果应该是

Name | othercolumn 
1 | 

我已经试过各种连接和concats的,但似乎无法与我限于它弄下来mysql的知识。有没有办法做到这一点,而不必手动做到这一点?逗号似乎给了我很多悲伤。谢谢!

回答

3

你需要对此非常小心。首先,我假设StaffId是一个数字。因此,一列添加到表:

alter table t add StaffId int; 

然后,更新此列:

update t join 
     staff s 
     on t.name = concat_ws(',', s.lastname, s.firstname) 
    set t.StaffId = s.StaffId; 

注意,你已经这样做了之后,你可能仍然有StaffId值是NULL

select t.* 
from t 
where t.StaffId is null; 

这些是不在staff表中的名称。他们需要更多的工作。完成后,您可以删除name列。