MySQL从Memory表中删除加入InnoDB表

时间:2016-12-28 23:23:33

标签: mysql join innodb sql-delete memory-table

我的查询是:

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 个答案:

答案 0 :(得分: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

中对此进行了解释
  

多表格语法

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选项不同。