在mysql中用等效id值替换名称列

在mysql中用等效id值替换名称列,mysql,Mysql,我目前在一个包含员工姓名的表中有一列。从那时起,我创建了一个包含员工信息的表,并希望将employee_names列替换为employee_id列,该列对应于表中已有的值 似乎是一个相当基本的问题,但似乎在任何地方都找不到答案 编辑:添加表结构 Responsible_table: category_name, employee_name (Has duplicates) Employee_table: employee_id {PK}, employee_name, employee_add

我目前在一个包含员工姓名的表中有一列。从那时起,我创建了一个包含员工信息的表,并希望将employee_names列替换为employee_id列,该列对应于表中已有的值

似乎是一个相当基本的问题,但似乎在任何地方都找不到答案

编辑:添加表结构

Responsible_table:
category_name,
employee_name (Has duplicates)

Employee_table:
employee_id {PK},
employee_name,
employee_address,
etc.
另外,如果有人能帮助我为责任表中的每个员工名生成具有唯一id的employee表,那将非常好

这是我的方法:

在这种情况下,你可以玩弄数据,帮助你尝试很多东西。。。首先单击左下角的“Build Schema”按钮,然后尝试右侧的“Run SQL”按钮


这是上面小提琴的内容:

设置一些测试数据:

CREATE TABLE responsible (
  category VARCHAR(100), 
  name VARCHAR(255)
);
INSERT INTO responsible VALUES
('teaching', 'First PersonA'),
('cleaning', 'Second PersonB'),
('watch', 'Third PersonC'),
('sleep', 'Fourth PersonD'),
('shopping', 'Third PersonC');

CREATE TABLE employee (
  id INT AUTO_INCREMENT NOT NULL,
  name VARCHAR(100),
  address VARCHAR(255), 
  PRIMARY KEY k_employee_id(id)
);
INSERT INTO employee VALUES
(NULL, 'First PersonA', 'some address'),
(NULL, 'Second PersonB', 'some address'),
(NULL, 'Some Person', 'some address'),
(NULL, 'Third PersonC', 'some address'),
(NULL, 'Other Person', 'some address'),
(NULL, 'Fourth PersonD', 'some address');
模式的实际转换:

ALTER TABLE responsible ADD COLUMN id INT;
UPDATE responsible r LEFT JOIN employee e ON (r.name=e.name) SET r.id=e.id;
ALTER TABLE responsible MODIFY COLUMN id INT NOT NULL;
ALTER TABLE responsible ADD FOREIGN KEY(id) REFERENCES employee(id) ON DELETE CASCADE;
ALTER TABLE responsible DROP COLUMN name;
以及作为上述证明的最终测试声明:

SELECT * FROM responsible;
首先将
id
列添加到表
responsible
中,然后由以下加入
employee
表的
UPDATE
语句填充。剩下的就是修改现在填写的
responsible.id
列,并删除现在已过时的
responsible.name

我建议您:

  • 创建一个新列
    employee\u id
  • 用employees表中的数据填充新列
  • 删除旧列
    employee\u name

    ALTER TABLE Responsible\u TABLE添加列employee\u id INT

    更新责任表rt内部联接员工表et 在rt.employee\u name=et.employee\u name上 设置rt.employee\u id=et.employee\u id

    更改表负责人\u表下拉列employee\u name

  • 至于填充表
    员工表

  • 创建表
  • 填充它

    创建表Employee\u表( 员工id自动递增, 员工姓名VARCHAR(32), 主键(员工id) )发动机=MyISAM

    插入到员工\表(员工\名称)中,从责任\表中选择不同的员工\名称


  • 请将您的表格结构添加到上述问题中。使用
    edit
    按钮进行编辑。这可以提供更好的答案,因为你不必用一般的术语来写,但可以给出一个具体的解决方案。谢谢很抱歉。第一次过帐到堆栈溢出。如果我能提供任何其他信息,请告诉我。您的问题不清楚,您的研究可能有问题。谢谢您的精彩评论。似乎正是我想要的。当我回到家的时候,我会尝试一下,如果它有效的话,我会选择你作为我的答案。另一个很棒的评论。谢谢你。我会让你知道它是否有效。