开发者

Using INSERT INTO SELECT when table structures do not match in MySQL

I'm familiar with the following use of the command:

INSERT INTO mytable 
SELECT * 
  FROM other_table 

This works fine when the tables are identical in terms of layout.

What I'd like to do is something like:

INSERT INTO mytable 
SELECT * 
  FROM other开发者_如何学JAVA_table ON DUPLICATE KEY UPDATE

This fails with a syntax error:

MySQL Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 ON QUERY INSERT INTO mytable SELECT * FROM other_table ON DUPLICATE KEY UPDATE

I can't find any docs that describe this.


Your statement is incomplete:

INSERT INTO mytable 
SELECT * 
  FROM other_table ON DUPLICATE KEY UPDATE

The syntax requires that you need to finish the UPDATE part by listing which columns to update with which values.

UPDATE:

This ought to work for your particular example:

INSERT INTO mytable2 (id, name, `key`)
  SELECT id, name, `key` FROM mytable b
ON DUPLICATE KEY UPDATE name = b.name

The changes are:

  • remove the parentheses around the column names in the SELECT part.
  • quote the column name key, since "key" is a reserved word in MySQL.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜