将行从一个表插入另一个表,该表有额外的列?

时间:2016-02-08 12:27:25

标签: mysql database perl

我正在努力将数据从一个db1迁移到另一个db2。

我有一个场景,其中表Person存在于两个数据库(db1和db2)中。

但是db2中的表有一个额外的列。这是编写查询以将数据从db1 Person迁移到db2 Person的最有效方法。

我写的如下,这是写它的最好方法吗?因为如果我有更多的列,只有一个额外的列,因此我需要在循环语句中提及所有列名。

$select = $dbh1->prepare("SELECT * FROM person");
$insert = $dbh2->prepare("INSERT INTO PERSON VALUES (?,?,?,?,?)");

$select->execute; 
while ( my($PR_ID,$NAME,$LASTNAME) = $select->fetchrow_array )
{
  $insert->execute($PR_ID,$NAME,$LASTNAME,'NULL','NULL');
}

2 个答案:

答案 0 :(得分:2)

如果源表和目标表中存在列不匹配,则使用下面的语法 -

insert into table1(col1,col2,col3) select col1,col2,col3 from table2;

答案 1 :(得分:0)

Zafar的答案可能是最好和最快的方法。

但是,如果您确实希望逐行执行此操作,则脚本中的数据库访问的一般规则是:从不访问列而不显式命名。所以:

  • SELECT *
  • INSERT INTO table_name VALUES (...)

脚本的更正版本,猜测列名称:

my $select = $dbh1->prepare("SELECT pr_id, name, lastname FROM person");
my $insert = $dbh2->prepare("INSERT INTO PERSON(pr_id, name, last_name) VALUES (?,?,?)");

$select->execute; 
while ( my($PR_ID,$NAME,$LASTNAME) = $select->fetchrow_array )
{
  $insert->execute($PR_ID,$NAME,$LASTNAME);
}

(注意,您不需要在新表中指定额外的列,只要它们可以为空,并且您希望该值为NULL。如果您执行想要插入你自己是NULL,不要使用'NULL',而是使用undef,就像ikegami说的那样。)