簡體   English   中英

如何將列值復制到新的 SQL 表、刪除重復項並創建映射?

[英]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;

作者地圖

應刪除所有重復項並將excerptIDauthorID之間的映射放入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM