mysql - 使用执行的语句将结果插入到另一个表中(Perl DBI 和 MySQL)

标签 mysql perl dbi dbd

我需要使用 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/

相关文章:

php - 如何从另一个表排序的mysql表中获取值?

perl - 为什么我不能减去 3 次?

c++ - 关于 IncludePath 的 MinGW 和 Perl 冲突

sql-server - 使用 DBI 连接到 SQL Server

mysql select 查询优化以及 limit 在 mysql 中的工作原理

php - 选择特定日期之前或之后未使用过的 MySQL 记录

mysql - 查询出了什么问题?

Perl SQLite DBI SELECT 绑定(bind)不起作用

perl - 为什么我不能通过 Perl 通过 JSON::XS 从 PostgreSQL 正确编码一个 bool 值?

php - 在MYSQL中使用WHERE时可以使用多个参数吗