我的项目正在增长,需要从一个表扩展到两个表。我有文章,每篇文章都有作者。目前,作者是帖子中的一列,但我已经创建了一个名为作者的新表。我想用所有唯一的authors示例填充新表**,并用新的author id替换posts表中的author值。什么是SQL?我的帖子表是30k条目。
bsxbgnwa1#
1.创建新表Authors。
Authors
CREATE TABLE Authors ( author_id INT AUTO_INCREMENT PRIMARY KEY, author_name VARCHAR(20) );
1.使用来自Posts的不同作者的集合填充Authors。
Posts
INSERT INTO Authors (author_name) SELECT DISTINCT author_name FROM Posts;
1.在Posts中添加一个author_id列,它引用Authors。
ALTER TABLE Posts ADD COLUMN author_id INT, ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
1.使用相应的author_id值更新Posts,这是基于每个表中的author_name的(低效)连接。MySQL支持多表UPDATE语法,这不是标准的SQL,但它对这些情况非常方便。
UPDATE Posts JOIN Authors USING (author_name) SET Posts.author_id = Authors.author_id;
1.从Posts中删除现在多余的author_name,并可选地使author_id不可为空。
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
qacovj5a2#
我会遵循这样一个过程:1.创建新表table21.将列table2_id添加到table11.通过从table1中进行选择来填充(更新)table2,包括table1.id(但称之为table1_id,这样您仍然有自己的单独ID)和您想要的table1.column1.使用table2中的id(主键)更新table1.table2_id1.从table2删除列table1_id
table2
table2_id
table1
table1.id
table1_id
table1.column
table1.table2_id
2条答案
按热度按时间bsxbgnwa1#
1.创建新表
Authors
。1.使用来自
Posts
的不同作者的集合填充Authors
。1.在Posts中添加一个author_id列,它引用Authors。
1.使用相应的author_id值更新
Posts
,这是基于每个表中的author_name的(低效)连接。MySQL支持多表UPDATE语法,这不是标准的SQL,但它对这些情况非常方便。1.从Posts中删除现在多余的author_name,并可选地使author_id不可为空。
qacovj5a2#
我会遵循这样一个过程:
1.创建新表
table2
1.将列
table2_id
添加到table1
1.通过从
table1
中进行选择来填充(更新)table2
,包括table1.id
(但称之为table1_id
,这样您仍然有自己的单独ID)和您想要的table1.column
1.使用
table2
中的id(主键)更新table1.table2_id
1.从
table2
删除列table1_id