为表中重复名称的每个名称分配唯一的ID

时间:2014-10-17 03:09:29

标签: php mysql

我有一张包含数百万销售记录的表,如下所示:

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

前三列填充了数据。我想将数据插入到company_id列中,该列将使用auto_incremented整数标识每个公司。我计划将company_id字段用作引用另一个包含每个公司详细信息的表的外键。许多公司都有多个事务,因此代码需要使用匹配的company_name将相同的company_id分配给sales表中的每一行。

有没有办法只使用MySQL?

2 个答案:

答案 0 :(得分: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;

您还应该从company_name表中删除sales字段,因为它现在存储在company表中。

答案 1 :(得分: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