我需要使用 Perl 和 DBI 在 MySQL 中执行查询并将结果插入到另一个表中。第二个表是动态创建的,用于定义与原始查询返回的相同数量的字段,再加上一个字段。
我无法提前知道第一个查询或它将返回多少个字段。所以我正在做这个非常难看的事情(总结):
# Execute the received query
my $sth = $dbh->prepare($received_sql);
$sth->execute;
# Get the fields names and create the new table
my @fields = @{$sth->{NAME}};
my $create_table = "...some sql and a map from @fields...";
# Start getting the results from the query one by one just to insert them into the new table
while (my @record = $sth->fetchrow_array) {
my $sql = "insert into `new_table` (";
$sql .= join ', ', map { "`$_`" } @fields;
$sql .= ") values (";
$sql .= join ', ', map { '?' } @fields;
$sql .= ')';
my $insert = $dbh->prepare($sql)
$insert->execute(@record);
}
如果我能做到这一点那就完美了:
insert into `new_table` (...) select (...) from ...
但是,我需要知道第一个查询返回的字段名称,并在向其中插入数据之前创建相应的表。
所以,我一直想知道,既然$sth
是一个实际的准备好的语句...是否有无论如何用它来告诉MySQL将该语句的结果插入到另一个表中,而不让它逐条记录地传递给 Perl?
预先感谢您的评论。
弗朗西斯科
最佳答案
如果您不想指定每个字段,可以使用如下语句:
CREATE TABLE newtable LIKE oldtable
(在此之后可能使用ALTER TABLE
来添加新字段)INSERT INTO newtable SELECT * FROM oldtable
创建表为 [$received_sql]
关于mysql - 使用执行的语句将结果插入到另一个表中(Perl DBI 和 MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302172/