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 пункт).

Другие вопросы по тегам