2012-08-02 95 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

相關問題