【问题标题】:Insert rows into different table in MYSQL在MYSQL中将行插入不同的表
【发布时间】:2011-11-29 15:41:55
【问题描述】:

我正在尝试重新映射我的 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 如何处理这样的事情。任何帮助将不胜感激

【问题讨论】:

标签: mysql database insert insert-select


【解决方案1】:

如果您愿意,并且需要复制大量数据,您可以使用这种方法:

创建一个将为您执行数据插入的存储过程:

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和类别id的参数执行它:

CALL Copy_From_Category_Article_To_Article_Tag(3, '7');

如果你愿意,上面的语句可以按顺序执行多次:

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

等等……

【讨论】:

  • 与一系列语句相比,这样做的优势是什么: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';等等..抱歉,我无法弄清楚格式化语法以使其看起来更具可读性
  • 我猜你的情况取决于..你是手动复制所有这些数据吗?您是否需要存储有关您复制的数据的信息?您是否只是在诸如 Sequel Pro 或 PHPMyAdmin 之类的 MySQL 工具中运行它?在需要重复更改值的情况下,一个简单的优势是代码的简单性;这个might 看起来更容易,因为参数可以并排设置,而不是在两个单独的、可能彼此相距很远的位置进行更改。但是,如果您需要跟踪所做的更改或修改,您也可以在过程中包含此类语句
  • 您不需要一个过程: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 字段对齐,就可以开始了。
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2011-11-30
相关资源
最近更新 更多