2016-12-28 7 views
0

Meine Frage ist:MySQL aus dem Speicher Tabelle löschen Tabelle InnoDB beitreten

DELETE FROM abc_memory INNER JOIN abc USING (abc_id) WHERE x < y 

und MySQL beschwert sich mit den Worten:

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 

In MySQL eine Einschränkung gibt es weder auf eine Speichertabelle mit einer InnoDB-Tabelle Beitritt noch löschen, während zwei normale Tabellen verbunden werden. Aber gibt es eine Beschränkung beim Löschen aus einer Speichertabelle, wenn Sie diese mit einer InnoDB-Tabelle verbinden?

Antwort

1

Wenn Sie JOIN in DELETE verwenden, müssen Sie die Tabellennamen in der DELETE -Klausel auflisten, um zu sagen, welche Tabelle (n) gelöscht werden soll.

DELETE abc_memory 
FROM abc_memory 
JOIN abc USING (abc_id) 
WHERE x < y 

Dies wird aus der abc_memory Tabelle löschen Sie einfach. Wenn Sie beide Tabellen löschen möchten, ändern Sie sie in DELETE abc_memory, abc.

Dies wird in der manual erklärt:

Multiple-Tabelle Syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] 
    tbl_name[.*] [, tbl_name[.*]] ... 
    FROM table_references 
    [WHERE where_condition] 

oder:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] 
    FROM tbl_name[.*] [, tbl_name[.*]] ... 
    USING table_references 
    [WHERE where_condition] 

Sie haben entweder die Tabellen zur Liste nach DELETE oder in einer USING Klausel (dies ist nicht das gleiche wie die USING Option in der JOIN Klausel).

+0

Das ist nicht wahr, wenn zwei normale (InnoDB) Tabellen beitreten. Wenn Sie keinen Tabellennamen in der DELETE-Klausel auflisten, löscht er in der Join-Klausel – Aliweb

+1

aus der linken Tabelle. Es handelt sich um ein Syntaxproblem, das nichts mit dem Typ der Tabelle zu tun hat. Lesen Sie die Syntaxbeschreibung im Handbuch. – Barmar

+0

@Aliweb Ich habe die Syntaxbeschreibung kopiert. – Barmar

Verwandte Themen