2016-12-28 10 views
0

Мой запрос: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.

Это объясняется в manual:

синтаксис Multiple-таблица

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).

+0

Это не так, если вы присоединяетесь к двум обычным (InnoDB) таблицам. Если вы не укажете ни одно имя таблицы в предложении DELETE, оно будет удалено из левой таблицы в предложении join – Aliweb

+1

Это проблема синтаксиса, она не имеет ничего общего с типом таблицы. Прочтите описание синтаксиса в руководстве. – Barmar

+0

@Aliweb Я скопировал описание синтаксиса. – Barmar

 Смежные вопросы

  • Нет связанных вопросов^_^