2011-11-29 53 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

相关问题