2014-10-17 72 views
0

表分配一個唯一的ID,在每個名字我有一個包含數以百萬計的銷售記錄,看起來像這樣的表:在名稱重複

CREATE TABLE `sales` (
`dollar_amount` INT NULL, 
`transaction_date` DATE NULL, 
`company_name` VARCHAR(45) NULL, 
`company_id` INT NULL); 

前三列填充數據。我想將數據插入到將使用auto_increated整數標識每個公司的company_id列中。我打算將company_id字段用作引用另一個表的外鍵,該表將包含每個公司的詳細信息。許多公司都有多個事務,因此代碼需要使用匹配的company_name將相同的company_id分配給銷售表中的每一行。

有沒有辦法做到這一點只使用MySQL?

+0

在這種情況下,爲什麼不使用company_name作爲主鍵?否則看看存儲過程。 – harvey 2014-10-17 03:15:26

回答

1

首先,我建議你創建company表:

CREATE TABLE company (
    company_id INT NOT NULL AUTO_INCREMENT, 
    company_name VARCHAR(45), 
    PRIMARY KEY(company_id)); 

然後從公司銷售數據插入:

INSERT INTO company (company_name) 
SELECT distinct company_name 
FROM sales; 

最後,更新您的sales表一中join得到company_id

UPDATE sales s 
    JOIN company c ON s.company_name = c.company_name 
SET s.company_id = c.company_id; 

你也應該從sales表中刪除company_name領域,因爲這是現在存儲在company表。

0

要定義一個自動遞增的整數,您只需使用AUTO_INCREMENT關鍵字。但是,如果將任何列定義爲auto_increment,則還必須將該列作爲主鍵。在這種情況下,哪一個在其他地方成爲外鍵是有意義的。

試試這個:

CREATE TABLE `sales` (
`dollar_amount` INT NULL, 
`transaction_date` DATE NULL, 
`company_name` VARCHAR(45) NULL, 
`company_id` INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(company_id); 

SQL Fiddle

+0

我想唯一標識每個公司,而不是每個交易。例如,當我由同一家公司插入兩筆交易時,我希望這兩筆記錄都獲得相同的company_id。在您的表格中,同一家公司的交易會獲得不同的company_id。也許auto_increment不適合我想要做的事情? – queequeg 2014-10-17 03:39:42

+0

也許你可以添加其他字段,如sales_id?您可能會從公司擁有一張表以及銷售一張表中受益,並讓銷售表引用公司ID – AdamMc331 2014-10-17 03:57:47