0

我的查询是:

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 表连接时从内存表中删除是否有限制?

4

1 回答 1

1

当您使用JOINin 时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)。

于 2016-12-28T23:27:59.770 回答