Diesen Link gefunden nützlich
Von dort kopiert
Oft möchte man einige Datensätze aus einer Tabelle löschen, basierend auf Kriterien in einer anderen Tabelle. Wie können Sie aus einer dieser Tabellen löschen, ohne die Datensätze in beiden Tabellen zu entfernen?
DELETE DeletingFromTable
FROM DeletingFromTable INNER JOIN CriteriaTable
ON DeletingFromTable.field_id = CriteriaTable.id
WHERE CriteriaTable.criteria = "value";
Der Schlüssel ist, dass Sie den Namen der Tabelle, aus der gelöscht werden soll, als SELECT angeben . Also nehmen JOIN und WHERE die Auswahl und Begrenzung vor, während DELETE das Löschen vornimmt. Sie sind jedoch nicht auf nur einen Tisch beschränkt. Wenn Sie eine Viele-zu-Viele-Beziehung haben (z. B. Zeitschriften und Abonnenten, verbunden mit einem Abonnement) und einen Abonnenten entfernen, müssen Sie auch alle potenziellen Datensätze aus dem Join-Modell entfernen.
DELETE subscribers, subscriptions
FROM subscribers INNER JOIN subscriptions
ON subscribers.id = subscriptions.subscriber_id
INNER JOIN magazines
ON subscriptions.magazine_id = magazines.id
WHERE subscribers.name='Wes';
Das Löschen von Datensätzen mit einem Join kann auch mit einem LEFT JOIN und einem WHERE erfolgen, um festzustellen, ob die verknüpfte Tabelle NULL war, sodass Sie Datensätze in einer Tabelle entfernen können, für die keine Übereinstimmung vorliegt (z. B. zur Vorbereitung des Hinzufügens einer Beziehung). ) Beispielbeitrag kommt noch.