2012-11-29 37 views
2

我的項目正在不斷擴大,需要從一張桌子擴展到兩張桌子。我可以將列從一個mysql表移動到另一個表,並用新表的新表替換原始列?

我有帖子,每個帖子都有一個作者。目前,作者只是帖子中的一個專欄,但我已經創建了一個名爲authors的新表。我想用新的作者id替換posts表中所有作者值的作者的所有唯一實例來填充新表。

有一些SQL魔力,可以幫助我做到這一點?我的職位表是30K項,所以我想避免做手工;)

的感謝!

回答

1

我會遵循一個過程是這樣的:

  1. 創建新表,table2
  2. table1
  3. 填充(更新)table2添加列table2_idtable1選擇,包括table1.id(但叫它table1_id所以你還是有自己單獨的ID)和table1.column你想
  4. 更新table1.table2_id與來自table2
  5. 的ID(主鍵)從table2
+0

我其實不想在表2中table1.id我想與表1中的任何帖子,是由匹配筆者 –

+0

它能夠在年底跌至創建相關table2.id。 –

10
  1. 刪除列table1_id創建新表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. 添加AUTHOR_ID列帖子,它引用作者。

    ALTER TABLE Posts ADD COLUMN author_id INT, 
        ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id); 
    
  4. 更新Posts與相應AUTHOR_ID值的基礎上,一個(低效)聯接基於在每個表中的AUTHOR_NAME。 MySQL支持多表UPDATE語法,這不是標準的SQL,但對於這些情況非常方便。

    UPDATE Posts JOIN Authors USING (author_name) 
    SET Posts.author_id = Authors.author_id; 
    
  5. 刪除帖子,從現在冗餘AUTHOR_NAME和可選使AUTHOR_ID不能爲空。

    ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL; 
    
相關問題