2013-07-27 116 views
2

也许这似乎与人们通常喜欢做的事情相反,但是我想在我的mysql表中重复行。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 
+0

你能否提供一个样本表来显示你希望达到的结果? – hjpotter92

+0

@ hjpotter92。当然,我在上面添加了一个。 – EddyTheB

回答

1

试试这个:

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

这目前在名为table_name表用递增的PROJECT_ID选择一切,重新插入记录到table_name。它假定file_id字段是自动递增的。

+0

太棒了,谢谢。我不得不将它调整为“SELECT file_name,project_id + 8 FROM table_name WHERE project_id = 1”,但它正在将SELECT的答案放在一起,与我一起努力的9的project_id坐在一起,现在它可以工作。谢谢。 – EddyTheB

2

在MySQL中,你可以使用SELECT语句结合的INSERT语句,使得新行中插入值通过insert语句是由select语句选择的语句。详情请参阅INSERT..SELECT

2

这听起来像你需要的是从SELECT插入。这样做的基本思路可以从下面的链接中找到。

mysql -> insert into tbl (select from another table) and some default values

附注:如果复制的行完全,那么你可能会与数据库键的问题。如果你不这样做,那么你的数据库就有设计问题。

+0

谢谢,这给了我一些东西来看,但我没有成功......我不知道如何将原始行的记录与其他值结合起来。你介意给我一个例子吗?我在上面提供了一个简化的示例。 – EddyTheB

1

我认为它可以解决这样,如果你有一个拿着整个项目ID列表,在我的例子project_table,并假设在file_tablefile_id设置为auto_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) 
+0

感谢您的帮助,我先尝试了Tanvir的解决方案,因为它更简单,而且工作,所以我没有尝试过你的。但我感谢你的帮助。 – EddyTheB