我的项目正在发展,需要从一个表扩展到两个。
我有帖子,每个帖子都有作者。目前作者只是帖子中的一个专栏,但我创建了一个名为authors的新表。我想用新作者和的所有唯一实例填充新表,用新的作者ID替换posts表中的作者值。
是否有一些sql魔法可以帮助我做到这一点?我的帖子表是30k条目,所以我想避免手动操作;)
谢谢!
答案 0 :(得分:13)
创建新表Authors
。
CREATE TABLE Authors (
author_id INT AUTO_INCREMENT PRIMARY KEY,
author_name VARCHAR(20)
);
使用Authors
中的一组不同作者填充Posts
。
INSERT INTO Authors (author_name)
SELECT DISTINCT author_name FROM Posts;
将一个author_id列添加到引用作者的帖子。
ALTER TABLE Posts ADD COLUMN author_id INT,
ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
根据基于每个表中author_name的(低效)连接,使用相应的author_id值更新Posts
。 MySQL支持多表UPDATE语法,这不是标准的SQL,但它对于这些情况非常方便。
UPDATE Posts JOIN Authors USING (author_name)
SET Posts.author_id = Authors.author_id;
从帖子中删除现在冗余的author_name,并可选择使author_id不可为空。
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
答案 1 :(得分:1)
我会遵循以下流程:
table2
table2_id
添加到table1
table2
中选择填充(更新)table1
,包括table1.id
(但称之为table1_id
,因此您仍拥有自己独立的ID)和{{ 1}}你想要table1.column
table1.table2_id
table2
table1_id
醇>