2016-12-28 284 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

当您在DELETE中使用JOIN时,必须列出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] 

你要么必须列出的表在DELETEUSING子句之后(这与JOIN子句中的USING选项不同)。

+0

如果连接两个正常(InnoDB)表,则不是这样。如果你没有在DELETE子句中列出任何表名,它将从连接子句 – Aliweb

+1

的左表中删除这是一个语法问题,它与表类型无关。阅读手册中的语法描述。 – Barmar

+0

@Aliweb我已经复制了语法描述。 – Barmar