私のプロジェクトは成長しており、1つのテーブルから2つのテーブルに拡張する必要があります。
私には投稿があり、各投稿には著者がいます。現在、著者は投稿の単なる列ですが、著者と呼ばれる新しいテーブルを作成しました。新しいテーブルに作成者のすべての一意のインスタンスを入力し、postsテーブルの作成者の値を新しい作成者IDに置き換えたいと思います。
これを行うのに役立つSQLマジックはありますか?私の投稿テーブルは30kエントリなので、手動で行うのは避けたいです;)
ありがとう!
私のプロジェクトは成長しており、1つのテーブルから2つのテーブルに拡張する必要があります。
私には投稿があり、各投稿には著者がいます。現在、著者は投稿の単なる列ですが、著者と呼ばれる新しいテーブルを作成しました。新しいテーブルに作成者のすべての一意のインスタンスを入力し、postsテーブルの作成者の値を新しい作成者IDに置き換えたいと思います。
これを行うのに役立つSQLマジックはありますか?私の投稿テーブルは30kエントリなので、手動で行うのは避けたいです;)
ありがとう!
新しいテーブルを作成します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;
Authorsを参照するauthor_id列をPostsに追加します。
ALTER TABLE Posts ADD COLUMN author_id INT,
ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
Posts
各テーブルのauthor_nameに基づく(非効率的な)結合に基づいて、対応するauthor_id値で更新します。MySQLは、標準SQLではないマルチテーブルUPDATE構文をサポートしていますが、このような状況では非常に便利です。
UPDATE Posts JOIN Authors USING (author_name)
SET Posts.author_id = Authors.author_id;
冗長になったauthor_nameをPostsから削除し、オプションでauthor_idをnull許容にしないようにします。
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
私は次のようなプロセスに従います:
table2
table2_id
を追加table1
table2
から選択して入力(更新)しtable1
ます(ただし、独自のIDを使用できるようにtable1.id
呼び出します)。table1_id
table1.column
table1.table2_id
からのID(主キー)で更新しますtable2
table1_id
から列を削除しますtable2