2015-06-01 39 views
0

我需要将所有数据从一个表更新到另一个数据库中的相同表(布局明智)。这可能吗?到目前为止,我已经尝试下面的(名字只虽然最好我想所有列,而不单独列出。)MySQL查询更新来自不同数据库中表的一个表中的所有列

我试图解决50和266

之间唯一的影响用户ID的数据。这给了我一个语法错误

UPDATE 
    foundation-restore.archive, foundation.archive 
SET 
    foundation-restore.archive.FName = foundation.archive.FName 
WHERE 
    foundation-restore.archive.user_id = foundation.archive.user_id  
    AND foundation-restore.archive.user_id > 50  
    AND foundation-restore.archive.user_id < 266 

注 - 数据是在相同的布局表在不同的数据库

+0

可能重复[MySQL更新表基于另一个表值](http://stackoverflow.com/questions/12394506/mysql-update-table-based-on-another-tables-value) –

+0

可能重复的[ SQL:更新表,其中列=多个值](http://stackoverflow.com/questions/5826456/sql-update-table-where-column-multiple-values) – rogerdeuce

+0

不是一个骗子,因为我需要从另一个数据库的数据 – Jeff

回答

1

试试这个(将在同一个数据库中的表工作,将最有可能不是不同的数据库上工作)

UPDATE 
    foundation-restore.archive INNER JOIN foundation.archive 
ON foundation-restore.archive.user_id = foundation.archive.user_id 
SET 
    foundation-restore.archive.FName = foundation.archive.FName 
WHERE foundation-restore.archive.user_id BETWEEN 50 AND 266; 
+0

是否有可能更新所有字段而不写出它们,例如SET foundation-restore.archive。* – Jeff

+0

我认为它不可能。我们需要指定列名称。但是,这是一个不同的问题,你有没有检查上述查询是否有效? –

0

您希望将备用数据库表中的所有列数据复制到不同数据库中的其他数据库表中。

要做到这一点,你必须做很多技巧。

这是最后的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; 

此致敬意。

相关问题