【发布时间】:2015-05-16 13:21:49
【问题描述】:
由于某种原因,INSERT INTO ... SELECT FROM ... CROSS JOIN ... ON DUPLICATE KEY UPDATE 的组合似乎不起作用。例如,我有一个带有一些数字信息CREATE TABLE t ( v INT ); 的表,我想将其复制到现有的MEMORY 表CREATE TABLE m (id INT DEFAULT 1, v INT, KEY `id` (`id`) ) ENGINE=MEMORY; 中,其顺序 ID 从 1 开始。而不是删除所有内容并重新插入键存在,我认为我可以执行以下操作:
INSERT INTO m
SELECT (@x:=@x+1), v FROM t
CROSS JOIN (SELECT @x:=1) a
ON DUPLICATE KEY UPDATE m.v=t.v;
但我收到以下错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“KEY UPDATE m.v=t.v”附近使用正确的语法
然而,以下查询运行没有错误(显然没有顺序值):
INSERT INTO m (v) SELECT v FROM t ON DUPLICATE KEY UPDATE m.v=t.v;
现在,我知道AUTO_INCREMENT,但我问的更笼统。我可以想到这种查询结构有用的一些情况,那么有什么问题呢?我正在运行 5.6.20。
SQL Fiddle 带表结构。
【问题讨论】:
标签: mysql select join insert on-duplicate-key