MySQL удалить из таблицы памяти присоединиться к таблице InnoDB
Мой запрос:
DELETE FROM abc_memory INNER JOIN abc USING (abc_id) WHERE x < y
и MySQL жалуется, говоря:
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 'INNER JOIN abc USING (abc_id) WHERE x < y' at line 1
В MySQL есть ограничение ни на соединение таблицы памяти с таблицей innodb, ни на удаление при соединении двух обычных таблиц. Но есть ли ограничения на удаление из таблицы памяти при объединении с таблицей InnoDB?
1 ответ
Решение
Когда вы используете JOIN
в DELETE
, вы должны перечислить имена таблиц в DELETE
пункт, чтобы сказать ему, из каких таблиц удалить.
DELETE abc_memory
FROM abc_memory
JOIN abc USING (abc_id)
WHERE x < y
Это просто удалит из abc_memory
Таблица. Если вы хотите удалить из обеих таблиц, измените его на DELETE abc_memory, abc
,
Это объясняется в руководстве:
Синтаксис нескольких таблиц
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*]] ... FROM table_references [WHERE where_condition]
или же:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*]] ... USING table_references [WHERE where_condition]
Вы должны либо перечислить таблицы после DELETE
или в USING
пункт (это не то же самое, что USING
вариант в JOIN
пункт).