【问题标题】:MySQL delete from Memory table join InnoDB tableMySQL 从内存表中删除连接 InnoDB 表
【发布时间】:2016-12-28 23:23:33
【问题描述】:

我的查询是:

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

【问题讨论】:

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


    【解决方案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]
    

    您必须在DELETE 之后或USING 子句中列出表(这与JOIN 子句中的USING 选项不同)。

    【讨论】:

    • 如果连接两个普通 (InnoDB) 表,则不是这样。如果在 DELETE 子句中没有列出任何表名,它将从 join 子句中的左表中删除
    • 是语法问题,与表的类型无关。阅读手册中的语法说明。
    • @Aliweb 我已经复制了语法说明。
    • 你是对的。我不确定为什么在我的脑海中,过去我已经成功使用了问题中提到的删除连接语法。无论如何,谢谢。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多