6

我的项目正在增长,需要从一个表扩展到两个。

我有帖子,每个帖子都有一个作者。目前作者只是帖子中的一列,但我创建了一个名为作者的新表。我想用作者的所有唯一实例填充新表,用新的作者 ID 替换 posts 表中的作者值。

是否有一些 sql 魔法可以帮助我做到这一点?我的帖子表有 30k 个条目,所以我想避免手动操作;)

谢谢!

4

2 回答 2

15
  1. 创建新表Authors

    CREATE TABLE Authors (
      author_id INT AUTO_INCREMENT PRIMARY KEY,
      author_name VARCHAR(20)
    );
    
  2. 填充Authors来自 的不同作者集Posts

    INSERT INTO Authors (author_name) 
    SELECT DISTINCT author_name FROM Posts;
    
  3. 在 Posts 中添加 author_id 列,该列引用作者。

    ALTER TABLE Posts ADD COLUMN author_id INT, 
        ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
    
  4. Posts根据基于每个表中的 author_name 的(低效)连接,使用相应的 author_id 值进行更新。MySQL 支持多表 UPDATE 语法,这不是标准的 SQL,但对于这些情况非常方便。

    UPDATE Posts JOIN Authors USING (author_name)
    SET Posts.author_id = Authors.author_id;
    
  5. 从 Posts 中删除现在冗余的 author_name,并可选择使 author_id 不可为空。

    ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
    
于 2013-01-01T21:37:38.857 回答
1

我会遵循类似的过程:

  1. 创建新表,table2
  2. 将列添加table2_idtable1
  3. table2通过从中选择填充(更新)table1,包括两者table1.id(但调用它,table1_id以便您仍然拥有自己的单独 id)和table1.column您想要的
  4. table1.table2_id使用来自的 ids(主键)更新table2
  5. table1_id删除列table2
于 2012-11-29T20:21:21.040 回答