【发布时间】:2013-01-02 05:37:38
【问题描述】:
我的项目正在增长,需要从一个表扩展到两个。
我有帖子,每个帖子都有一个作者。目前作者只是帖子中的一列,但我创建了一个名为作者的新表。我想用作者的所有唯一实例填充新表并用新的作者 ID 替换帖子表中的作者值。
是否有一些 sql 魔法可以帮助我做到这一点?我的帖子表有 30k 个条目,所以我想避免手动操作;)
谢谢!
【问题讨论】:
标签: mysql
我的项目正在增长,需要从一个表扩展到两个。
我有帖子,每个帖子都有一个作者。目前作者只是帖子中的一列,但我创建了一个名为作者的新表。我想用作者的所有唯一实例填充新表并用新的作者 ID 替换帖子表中的作者值。
是否有一些 sql 魔法可以帮助我做到这一点?我的帖子表有 30k 个条目,所以我想避免手动操作;)
谢谢!
【问题讨论】:
标签: mysql
创建新表Authors。
CREATE TABLE Authors (
author_id INT AUTO_INCREMENT PRIMARY KEY,
author_name VARCHAR(20)
);
用来自Posts 的不同作者集填充Authors。
INSERT INTO Authors (author_name)
SELECT DISTINCT author_name FROM Posts;
在 Posts 中添加 author_id 列,引用作者。
ALTER TABLE Posts ADD COLUMN author_id INT,
ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
使用相应的 author_id 值更新 Posts,基于基于每个表中 author_name 的(低效)连接。 MySQL 支持多表 UPDATE 语法,这不是标准的 SQL,但在这些情况下非常方便。
UPDATE Posts JOIN Authors USING (author_name)
SET Posts.author_id = Authors.author_id;
从 Posts 中删除现在冗余的 author_name,并可选择使 author_id 不可为空。
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
【讨论】:
我会遵循如下流程:
table2
table2_id 列添加到table1
table1 中选择来填充(更新)table2,包括table1.id(但称它为table1_id,这样你仍然有自己的单独ID)和你想要的table1.column
table2 的ID(主键)更新table1.table2_id
table2 删除列table1_id
【讨论】: