2015-10-17 33 views
-2

我目前在包含employee_names的表中有一列。此后,我创建了一个包含员工信息的表,并希望用employee_id列替换employee_names列,该列与表中已有的值相对应。用mysql中的等效id值替换名称列

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

编辑:添加表结构

Responsible_table: 
category_name, 
employee_name (Has duplicates) 

Employee_table: 
employee_id {PK}, 
employee_name, 
employee_address, 
etc. 

此外,如果任何人都可以如何生成与在Responsible_table每个employee_name一个唯一的ID的职员表帮助将是巨大的

+1

请将您的表格结构添加到上面的问题。使用编辑按钮。这样可以得到更好的答案,因为人们不必一般地写字,但可以提供具体的解决方案。谢谢! – arkascha

+0

对不起。第一次发布到堆栈溢出。如果有任何其他信息可以提供,请告诉我。 – thebluelad

+0

你的问题不清楚,你的研究怀疑。 – Strawberry

回答

0

这是我的方法:

http://sqlfiddle.com/#!9/2eb74

在这种拨弄你可以玩的数据,帮助了很多尝试的事情s ...首先点击左下角的“Build Schema”按钮,然后尝试右侧的“运行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,然后通过以下UPDATE声明加入employee桌上摆满。剩下的是修改现在填充的responsible.id列,因为它是有意义的,并且删除现在已经过时的列responsible.name列。

+0

另一个令人敬畏的评论。感谢堆。我会让你知道它是否有效。 – thebluelad

0

我建议你:

  1. 在新的列上创建一个新的列employee_id
  2. 填充与从表中的员工数据
  3. 删除旧列employee_name

    ALTER TABLE Responsible_table ADD COLUMN employee_id INT;

    UPDATE Responsible_table rt INNER JOIN Employee_table et ON rt.employee_name = et.employee_name SET rt.employee_id = et。员工ID;

    ALTER TABLE Responsible_table DROP COLUMN employee_name;

作为用于填充表Employee_table

  1. 创建表
  2. 填充它

    CREATE TABLE Employee_table( EMPLOYEE_ID INT AUTO_INCREMENT, employee_name VARCHAR(32) , PRIMARY KEY(employee_id) )ENGINE = MyISAM;

    INSERT INTO Employee_table(employee_name)SELECT DISTINCT employee_name FROM Responsible_table;

+0

感谢您的评论。似乎是我正在寻找的东西。当我回到家时,我会放弃它,并选择你作为我的答案,如果它的工作。 – thebluelad