2

也许这似乎与人们通常想做的相反,但我想在我的 mysql 表中复制行。

因此,例如,我有一个表,其中 1 行包含 project_id,一行包含 file_name。每个项目都有很多与之关联的文件。我想将一个项目存在的所有行复制到另一个项目中。我可以编写一些 python 脚本来执行此操作,但我怀疑有一种方法可以从 mysql 中执行此操作。

有任何想法吗?谢谢。

例如,如果我有一个看起来像这样的项目......

file_id, file_name, project_id
-------, ---------, ----------
      1, file1.png,          1
      2, file2.png,          1
      3, file3.png,          1

...最多大约 100 行。

我应该输入什么来获得一个看起来像这样的项目......

file_id, file_name, project_id
-------, ---------, ----------
      1, file1.png,          1
      2, file2.png,          1
      3, file3.png,          1
      4, file1.png,          2
      5, file2.png,          2
      6, file3.png,          2
4

4 回答 4

2

在 MySQL 中,您可以将 insert 语句与 select 语句结合使用,这样 insert 语句插入到新行中的值就是 select 语句选择的值。有关详细信息,请参阅INSERT..SELECT

于 2013-07-27T00:31:00.143 回答
2

听起来您需要从 SELECT 中插入。可以从下面的链接中找到执行此操作的基本思想。

mysql -> 插入 tbl(从另一个表中选择)和一些默认值

旁注:如果您完全复制行,那么您可能会遇到数据库键的问题。如果您不这样做,那么您的数据库存在设计问题。

于 2013-07-27T00:33:19.583 回答
1

尝试这个:

INSERT INTO table_name (file_name, project_id)
SELECT file_name, project_id + 1 FROM table_name;

这会选择当前在名为的表中的所有内容,table_name并将记录重新插入到table_name具有递增的 project_id 中。它假定该file_id字段是自动递增的。

于 2013-07-28T05:15:15.660 回答
1

我认为可以通过这种方式解决,如果您有一个包含整个项目 id 列表的主表,在我的示例中为 project_table,并假设file_id设置file_tableauto_increment

INSERT INTO file_table ( file_name, project_id)
VALUES (SELECT file_name, project_table.project_id
        FROM project_table
        INNER JOIN file_table ON project_id = 1
        WHERE project_table.id != 1)
于 2013-07-28T05:22:46.487 回答