2014-10-17 73 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