也许这似乎与人们通常喜欢做的相反,但我想在我的mysql表中复制行。
因此,例如,我有一个包含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 :(得分:2)
在MySQL中,您可以将insert语句与select语句组合在一起,以便insert语句在新行中插入的值是select语句选择的值。有关详细信息,请参阅INSERT..SELECT。
答案 1 :(得分:2)
听起来你需要的是从SELECT中插入。这样做的基本思路可以在下面的链接中找到。
mysql -> insert into tbl (select from another table) and some default values
附注:如果您完全复制行,那么您可能会遇到数据库密钥问题。如果不这样做,那么您的数据库存在设计问题。
答案 2 :(得分: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
字段是自动递增的。
答案 3 :(得分:1)
我认为可以通过这种方式解决,如果您有一个主表,其中包含整个项目ID列表,我的示例中为project_table,并假设file_id
中的file_table
设置为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)