2011-11-29 57 views
0

我試圖重新映射我的mysql數據庫中的一些數據。在MYSQL中將行插入到不同的表中

我想將名爲category_article的表內的內容移動到名爲article_tag的另一個表。

我想移動一個字段(article_id)並添加我自己的數據tag_id

我目前有:

INSERT INTO article_tags (tag_id, article_id) 
SELECT 3, article_id 
FROM category_article 
WHERE category_id = '7'; 

很明顯,我知道「3」是錯誤的在這方面,所以也許我需要將其設置爲一個變量?

我不確定mysql如何適用於這樣的事情。任何幫助,將不勝感激

+3

如果你想3的值,那麼這是正確的 –

+0

是正確的,http://dev.mysql.com/doc/refman /5.0/en/insert-select.html – Cesar

+0

它看起來就像你在那裏,但如果你想'3'增加你可以設置你插入的表中的PK增量,然後不要在插入時指定它。 – 2011-11-29 15:48:53

回答

0

如果你想,如果你需要複製大量數據,你可以使用這種方法:

創建將執行數據的插入你的存儲過程:

CREATE PROCEDURE `Copy_From_Category_Article_To_Article_Tag` 
(
     IN prm_tagid INT 
    , IN prm_category_id VARCHAR(10) 
) 
BEGIN 
    INSERT INTO article_tags (tag_id, article_id) 
    SELECT prm_tagid, article_id 
    FROM category_article 
    WHERE category_id = prm_category_id; 
END 

然後與標籤ID和記錄的類別編號的參數來執行要複製:

CALL Copy_From_Category_Article_To_Article_Tag(3, '7'); 

上面的語句可以執行含多處爲了e時代,如果你喜歡:

CALL Copy_From_Category_Article_To_Article_Tag(3, '7'); -- copy category 7 to tag 3 
CALL Copy_From_Category_Article_To_Article_Tag(5, '1'); -- copy category 1 to tag 5 
CALL Copy_From_Category_Article_To_Article_Tag(9, '4'); -- copy category 4 to tag 9 

等等......

+0

與以下一系列語句相比,它的優勢如下: INSERT INTO article_tags(tag_id,article_id)SELECT 44,article_id FROM category_article WHERE category_id ='7'; INSERT INTO article_tags(tag_id,article_id)SELECT 12,article_id FROM category_article WHERE category_id ='19'; 等等.. 道歉我找不出格式化的語法,使其看起來更具可讀性 –

+0

我想你的情況下,它將取決於..你是手動複製所有這些數據?你是否需要存儲關於你複製的數據的信息?你只是在MySQL工具(如Sequel Pro或PHPMyAdmin)中運行它?一個簡單的優點是代碼簡單,在需要重複更改值的情況下;而不是在兩個單獨的,可能遠離每個其他位置的情況下進行更改,因爲可以將參數設置在彼此旁邊,所以這個「可能」看起來更容易。但是,如果您需要跟蹤所做的更改或修改,您也可以在過程中包含這些語句 – Nonym

+0

您不需要以下過程:INSERT INTO article_tags(tag_id,article_id)SELECT CASE category_id WHEN 7 THEN 44 WHEN 19 THEN 12 END,article_id FROM category_article WHERE category_id IN(7,12);工作得很好。您也可以暫時將tag_id放入類別表中,然後使用連接。只要你選擇的字段與INSERT字段對齊,你就可以走了。 – Patrick