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