查询语法错误:INSERT ... SELECT ... NOT IN ... ON DUPLICATE KEY UPDATE

时间:2015-05-05 01:10:24

标签: mysql select syntax-error sql-insert unique-key

我有两个测试数据库db0bd1,分别包含表t0t1。每个表都包含c0c1列,其中c0的索引为unique

图形上,两个表都定义为:

+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| c0      | varchar(1) | YES  | UNI | NULL    |       |
| c1      | varchar(1) | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+

我想将行从db0.t0复制到db1.t1。指示以下查询:

  • 将行从t0复制到t1;
  • 在复制的行中将列c1设置为123;
  • 避免复制c1;
  • 中已存在的行(所有列相等)
  • 复制那些具有相同键(c0)的行,否则则不同。

查询是:

use db1;

insert into t1 (c0, c1)
select c0, 123 from db0.t0
where (db0.t0.c0, db0.t0.c1) not in
    (select c0, c1 from db1.t1)
on duplicate key update;

此查询提供SQL语法错误。但是,删除它的最后一行会使MySQL接受语法并执行查询,但是当它遇到具有相同键(c0)的行时会最终抛出错误,否则会不同(c1 ):

use db1;

insert into t1 (c0, c1)
select c0, 123 from db0.t0
where (db0.t0.c0, db0.t0.c1) not in
    (select c0, c1 from db1.t1);

查看MySQL INSERT ... SELECT syntax的文档,我似乎没有做错任何事。

发生了什么事?

0 个答案:

没有答案