По-видимому, комбинация 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;
с последовательными идентификаторами, начиная с 1. Вместо того, чтобы удалять все и повторно вставлять, если ключи существуют, я думал, что смогу выполните следующие действия:INSERT + SELECT FROM + JOIN + ON DUPLICATE KEY MySQL
INSERT INTO m
SELECT (@x:[email protected]+1), v FROM t
CROSS JOIN (SELECT @x:=1) a
ON DUPLICATE KEY UPDATE m.v=t.v;
Но я получаю следующее сообщение об ошибке:
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 'KEY UPDATE m.v=t.v' at line 1
Тем не менее, следующий запрос выполняется без ошибок (очевидно, без последовательных значений):
INSERT INTO m (v) SELECT v FROM t ON DUPLICATE KEY UPDATE m.v=t.v;
Теперь я знаю AUTO_INCREMENT
, но я прошу в целом. Я могу подумать о некоторых ситуациях, когда эта структура запросов будет полезна, так что что случилось? Я бегу 5.6.20.
SQL Fiddle со структурой таблицы.
К сожалению, я читал через комментарии в документации, и не могли найти комментарии вы цитирующие , Если я не пропущу ключевой момент, который упоминается, что подразумевает, что это не работает, нигде не рассматривается поведение JOIN. Не могли бы вы любезно направить меня на комментарии, о которых вы говорите? – concat
@concat А ... Я пропустил, что ПРИСОЕДИНЯТЬ это то, что тебя доставало. Мне придется играть с SQL Fiddle, чтобы понять это ... –