2016-04-14 1 views
0

Ich möchte alle Zeilen in beiden Tabellen löschen, wo die chart_id 1 ist, aber es funktioniert nicht und ich habe keine Ahnung warum.Wie löscht man Zeilen aus zwei Tabellen mit INNER JOIN in mysql?

DELETE `cms_module_charts` 
FROM `cms_module_charts` 
INNER JOIN `cms_module_charts_kategorie` 
ON `cms_module_charts_kategorie`.`chart_id`=`cms_module_charts`.`chart_id` 
WHERE `chart_id`= 1 

Dies ist der Fehler: Unerwartetes Zeichen. (In der Nähe von "cms_module_charts" an Position 7)

Antwort

0

Vom MySQL Docs sieht es aus wie Sie dies leicht tun können:

DELETE t1, t2 
    FROM t1 INNER JOIN t2 INNER JOIN t3 
    WHERE t1.id=t2.id AND t2.id=t3.id; 

ODER

DELETE 
    FROM t1, t2 
USING t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id; 

ich es sieht auch wie die neueren, vorzuziehen, JOIN Standard akzeptabel ist, und ich habe keine Ahnung, Warum beschwert sich Ihre Anfrage? Sind Sie sicher, dass Sie in Ihrer Anfrage keine merkwürdigen Zeichen haben?

0

Die Standard-SQL-Syntax DELETE FROM ist, ohne nichts butspace zwischen DELETE und FROM

Versuchen Sie folgendes:

DELETE FROM (`cms_module_charts` INNER JOIN `cms_module_charts_kategorie` 
ON `cms_module_charts_kategorie`.`chart_id`=`cms_module_charts`.`chart_id`) 
WHERE `chart_id`= 1 
+0

Falsch, es gibt eine optionale Multi-Tabellen-Syntax .. schauen Sie sich die Dokumentation an. – Arth

+0

@Arth im SQL-Standard, müssen Sie diese Syntax verwenden !! vielleicht bietet mySQL eine optionale Syntax, aber in diesem Fall ist es veraltet ... – Vincent

+0

Hmm, ich bin mir ziemlich sicher, dass es nicht veraltet ist .. und die Frage besagt, dass es für mysql ist. Einfach zu sagen, dass die Syntax * blah * ohne irgendeine Klarstellung ist, ist irreführend. – Arth

0

ich denke, in dem Datenbankschema Sie verwenden sollen ON DELETE CASCADE, dann löschen Sie beim Löschen einer Zeile ihre Referenzen, aber wenn Sie mit Join löschen, ergibt das keinen Sinn.