6

私のプロジェクトは成長しており、1つのテーブルから2つのテーブルに拡張する必要があります。

私には投稿があり、各投稿には著者がいます。現在、著者は投稿の単なる列ですが、著者と呼ばれる新しいテーブルを作成しました。新しいテーブルに作成者のすべての一意のインスタンスを入力し、postsテーブルの作成者の値を新しい作成者IDに置き換えたいと思います。

これを行うのに役立つSQLマジックはありますか?私の投稿テーブルは30kエントリなので、手動で行うのは避けたいです;)

ありがとう!

4

2 に答える 2

15
  1. 新しいテーブルを作成しますAuthors

    CREATE TABLE Authors (
      author_id INT AUTO_INCREMENT PRIMARY KEY,
      author_name VARCHAR(20)
    );
    
  2. からの個別Authorsの作成者のセットを入力しPostsます。

    INSERT INTO Authors (author_name) 
    SELECT DISTINCT author_name FROM Posts;
    
  3. Authorsを参照するauthor_id列をPostsに追加します。

    ALTER TABLE Posts ADD COLUMN author_id INT, 
        ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
    
  4. Posts各テーブルのauthor_nameに基づく(非効率的な)結合に基づいて、対応するauthor_id値で更新します。MySQLは、標準SQLではないマルチテーブルUPDATE構文をサポートしていますが、このような状況では非常に便利です。

    UPDATE Posts JOIN Authors USING (author_name)
    SET Posts.author_id = Authors.author_id;
    
  5. 冗長になったauthor_nameをPostsから削除し、オプションでauthor_idをnull許容にしないようにします。

    ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
    
于 2013-01-01T21:37:38.857 に答える
1

私は次のようなプロセスに従います:

  1. 新しいテーブルを作成し、table2
  2. に列table2_idを追加table1
  3. table2から選択して入力(更新)しtable1ます(ただし、独自のIDを使用できるようにtable1.id呼び出します)。table1_idtable1.column
  4. table1.table2_idからのID(主キー)で更新しますtable2
  5. table1_idから列を削除しますtable2
于 2012-11-29T20:21:21.040 に答える