您希望将备用数据库表中的所有列数据复制到不同数据库中的其他数据库表中。
要做到这一点,你必须做很多技巧。
这是最后的SQL
SET @Source_Database = "your-source-database";
SET @Dest_Database = "your-destination-database";
SET @Table = "your-table";
SET @Key_Field = "key-field-of-table";
SET @SetStr = (
SELECT
GROUP_CONCAT(CONCAT(@Dest_Database,".",@Table,".",COLUMN_NAME," = ",@Source_Database,".",@Table,".",COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE [email protected]_Database
AND [email protected]
AND COLUMN_KEY<>"PRI");
set @SQLStr = CONCAT(
"update ",@Dest_Database,".",@Table,
" inner join ",@Source_Database,".",@Table,
" on ",@Dest_Database,".",@Table,".",@Key_Field,
" = ",@Source_Database,".",@Table,".",@Key_Field,
" set ",@SetStr,
" where ",@Dest_Database,".",@Table,".",@Key_Field ," < 10"
);
PREPARE SQL1 FROM @SQLStr;
EXECUTE SQL1;
注意
1:我们需要知道的所有字段名,换上设置条款,所以你我们使用 INFORMATION_SCHEMA表
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE [email protected]_Database
AND [email protected]
AND COLUMN_KEY<>"PRI"
第二:我们使用GROUP_CONCAT函数得到各个领域单行
GROUP_CONCAT(列)
,并添加concat函数创建SET条款的方案
set @SetStr = (
SELECT
GROUP_CONCAT(CONCAT(@Dest_Database,".",@Table,".",COLUMN_NAME," = ",@Source_Database,".",@Table,".",COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE [email protected]_Database
AND [email protected]
AND COLUMN_KEY<>"PRI");
第3张:我们使用PREPARE和EXE CUTE语句来声明一个SQL字符串并执行它。
PREPARE SQL1 FROM @SQLStr;
EXECUTE SQL1;
此致敬意。
可能重复[MySQL更新表基于另一个表值](http://stackoverflow.com/questions/12394506/mysql-update-table-based-on-another-tables-value) –
可能重复的[ SQL:更新表,其中列=多个值](http://stackoverflow.com/questions/5826456/sql-update-table-where-column-multiple-values) – rogerdeuce
不是一个骗子,因为我需要从另一个数据库的数据 – Jeff