[英]How to copy column values to a new SQL table, remove duplicates and create mappings?
我有一張桌子Excerpt
CREATE TABLE IF NOT EXISTS excerpt(
excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT,
author VARCHAR(45) NOT NULL,
title VARCHAR(255) NOT NULL,
text VARCHAR(2500) NOT NULL,
comments VARCHAR(2500) NOT NULL,
PRIMARY KEY (excerptID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
並希望在散發有關這些值的(通常復制)值和信息刪除其列作者為兩個新表Author
CREATE TABLE IF NOT EXISTS author(
authorID INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NOT NULL ,
PRIMARY KEY (authorID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
和AuthorMap
:
CREATE TABLE IF NOT EXISTS authormap (
excerptID INT UNSIGNED NOT NULL,
authorID INT UNSIGNED NOT NULL,
PRIMARY KEY (excerptID, authorID),
CONSTRAINT authorMapFK FOREIGN KEY (excerptID) REFERENCES excerpt (excerptID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT authorFK FOREIGN KEY (authorID) REFERENCES author (authorID)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=INNODB;
應刪除所有重復項並將excerptID和authorID之間的映射放入AuthorMap
,即最終所有唯一的作者姓名都應在表Author
,創建的 ID 和所有ExcerptID應與新創建的 AuthorID 一起復制到AuthorMap
。
我該怎么做?
您可以將表authors
創建為:
create table authors (
author_id int auto_increment primary key,
name varchar(255) -- or whatever
);
insert into authors (name)
select distinct author
from excerpt;
然后將作者映射表創建為:
create table excerptAuthors (
excerptAuthorsId int auto_icnrement primary key,
excerptid int,
authorid int
);
最后:
insert into excerptAuthors (excerptId, authorId)
select e.excerptId, a.authorId
from excerpts e join
authors a
on e.author = a.name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.