Mysql 仅当两个表中都存在列时,才将值从一个表复制到另一个表?

Mysql 仅当两个表中都存在列时,才将值从一个表复制到另一个表?,mysql,copy,Mysql,Copy,我正在尝试将表从一个数据库复制到另一个数据库,如下所示: INSERT INTO db1.content SELECT * FROM db2.content; 一些字段已添加,一些字段的名称已更改。因此,我想设置一个条件,只复制两个表中存在的列 可能是这样的,其中*是列名的通配符 INSERT INTO db1.content SELECT * FROM db2.content WHERE db1.* = db2.*; 您可以通过以下过程执行此操作,其中表1是源表,表2是目标表: CREAT

我正在尝试将表从一个数据库复制到另一个数据库,如下所示:

INSERT INTO db1.content SELECT * FROM db2.content;
一些字段已添加,一些字段的名称已更改。因此,我想设置一个条件,只复制两个表中存在的列

可能是这样的,其中
*
是列名的通配符

INSERT INTO db1.content SELECT * FROM db2.content WHERE db1.* = db2.*;

您可以通过以下过程执行此操作,其中表1是源表,表2是目标表:

CREATE DEFINER=`root`@`localhost` PROCEDURE `copySimilarTableContent`(in table1 varchar(50), in table2 varchar(50))
    BEGIN
     drop temporary table if exists tempTable1;
     create temporary table tempTable1
      select column_name from information_schema.columns where `TABLE_SCHEMA`='db2' and table_name=table1;

     drop temporary table if exists tempTable2;
     create temporary table tempTable2
      select column_name from information_schema.columns where `TABLE_SCHEMA`='db1' and table_name=table2;

     set @common_col = (select group_concat(t1.column_name)
          from tempTable1 t1
          left join tempTable2 t2 on t1.column_name = t2.column_name
          where t2.column_name is not null);

     set @sql = concat("insert into ", table2, " (",@common_col,") select ", @common_col, " from ", table1);

      PREPARE stmt FROM @sql;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;


    END

两个表中公共列的顺序相同?@Karunakar是正确的