2015-10-17 38 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