2012-08-02 90 views
3

我有两个具有相同模式的表。还有很多专栏!mySQL更新另一个表中相应列的所有列

我可以通过做

update t1 
join t2 on t2.id=t1.id 
set t1.column1=t2.column1, 
    t1.column2=t2.column2... 
where t2.columnx > 123; 

更新从相应的表中的记录,但我有一吨的字段和我的天性,一个懒惰的混蛋谁宁愿剃牦牛和岗位上比SE型列出列表(可能丢失1)。

除了一些将列列表写入文本文件等的时髦解决方案之外,是否有有效的mySQL语法可以跳过所有列的显式列表并且更像INSERT ... SELECT?

回答

1
REPLACE INTO t1 SELECT * FROM t2 WHERE columnx>123; 
+0

这可以在t1中添加新行。他只需要更新现有的行。 – CyberDem0n 2012-08-02 19:18:24

+0

我读了OQ让表格同步 - 但是IMBW of course – 2012-08-02 19:22:35

+1

必须注意的是,REPLACE命令实际上执行了DELETE操作,然后是INSERT。这是一个关键的区别,如果您的表具有外键可以在CASCADE – 2015-07-29 07:51:06

0

尝试使用REPLACE INTO ... SELECT ...语法http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE INTO t1 SELECT t2.* FROM t2, t1 WHERE t1.columnx>123 AND t1.id=t2.id; 

警告!未经测试!

此代码仅适用于表格在id列上具有唯一索引的情况。

+0

上执行DELETE,那么必须注意REPLACE命令实际上执行DELETE操作,然后执行INSERT。如果你的表有可以在CASCADE上执行DELETE的外键,这是一个至关重要的区别 – 2015-07-29 07:50:59

相关问题