Löschen mit Join in MySQL
-
Einschränkungen bei der Verwendung der
DELETE FROM
-Anweisung in MySQL -
Verwenden der
INNER JOIN
-Methode in MySQL -
Das Endergebnis bei der Verwendung von
JOIN
zum Löschen mit MySQL
Dieser Tutorial-Artikel zeigt Ihnen, wie Sie Daten in mehreren Tabellen mit der MySQL-Methode JOIN
löschen. Dies ist nützlich, wenn Sie gleichzeitig Datensätze in einer Tabelle löschen, die sich auf einen bestimmten Datensatz in einer anderen beziehen.
Einschränkungen bei der Verwendung der DELETE FROM
-Anweisung in MySQL
Die Anweisung DELETE FROM
wird verwendet, um Zeilen in einer Tabelle zu löschen. Mit WHERE
können Sie die Zeilen und Bedingungen angeben, die beim Löschen erfüllt werden sollen.
Der folgende Code enthält zwei Tabellen, die erste enthält Waren von Lieferanten und deren Standort, die zweite eine Liste von Ladenbesitzern, die diese Waren verkaufen:
Create Table supplier (
suppId INTEGER PRIMARY KEY,
category TEXT NOT NULL,
location TEXT NOT NULL
);
Create Table shops (
owner TEXT NOT NULL,
shptype TEXT NOT NULL,
area TEXT NOT NULL
);
INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');
INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');
Alle Geschäfte in der Tabelle befinden sich in der Innenstadt, daher macht es in diesem Fall keinen Sinn, Aufzeichnungen über Lieferanten im Bereich Uptown
zu führen.
Die Verwendung von DELETE
funktioniert jeweils nur für eine Tabelle. Sie können Daten aus der Tabelle shops
übernehmen, Kriterien festlegen und alle Datensätze in der Tabelle supplier
löschen, die alle Bedingungen erfüllen.
In diesem Fall entfernen wir mit JOIN
alle Einträge von Uptown
aus der supplier
-Tabelle.
Verwenden der INNER JOIN
-Methode in MySQL
Mit der INNER JOIN
-Methode können Sie zwei oder mehr Tabellen zusammenführen und mehrere Zeilen auf einmal löschen.
Es gibt alternative Optionen, wie z. B. die Verwendung von Unterabfragen, aber dies ist eine praktischere Methode, um die Arbeit zu erledigen. Anhand der obigen Beispieltabellen können Sie in beiden Tabellen alle Zeilen löschen, die den Wert Uptown
haben.
Der folgende Code sucht nach dem Standort der Geschäfte und hält die Lieferanten im Bereich Downtown
, während die als Uptown
registrierten Lieferanten gelöscht werden:
DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;
Das Verbinden von Tabellen basierte auf Feldern, die ähnliche Daten gemeinsam hatten. Das Kategoriefeld zeigte in diesem Fall an, was Lieferanten zur Verfügung stellten und welche Geschäfte verkauften.
Wenn Sie die beiden Tabellen zusammenführen, können Sie nur eine Bedingung für das Löschen definieren. In diesem Fall bestimmt der Standort des Lieferanten, welche Zeile gelöscht werden soll.
Sie können auch beide Tabellen gleichzeitig löschen, indem Sie einfach den Namen der Tabelle nach DELETE
hinzufügen. Dies funktioniert, wenn Sie mehrere Datensätze in mehr als einer Tabelle haben.
DELETE supplier, shops FROM supplier
...
Das Endergebnis bei der Verwendung von JOIN
zum Löschen mit MySQL
Das Ergebnis lässt Ihre Tabellen intakt und entfernt gleichzeitig alle Datensätze von Lieferanten, die die oben genannten Kriterien nicht erfüllen.
Create Table supplier (
suppId INTEGER PRIMARY KEY,
category TEXT NOT NULL,
location TEXT NOT NULL
);
Create Table shops (
owner TEXT NOT NULL,
shptype TEXT NOT NULL,
location TEXT NOT NULL
);
INSERT INTO supplier VALUES (0001, 'Veggies', 'Downtown');
INSERT INTO supplier VALUES (0002, 'Fruits', 'Downtown');
INSERT INTO supplier VALUES (0003, 'Dairy', 'Downtown');
INSERT INTO supplier VALUES (0004, 'Veggies', 'Uptown');
INSERT INTO supplier VALUES (0005, 'Fruits', 'Uptown');
INSERT INTO supplier VALUES (0006, 'Dairy', 'Uptown');
INSERT INTO shops VALUES ('Mark', 'Veggies', 'Downtown');
INSERT INTO shops VALUES ('Mark', 'Fruits', 'Downtown');
INSERT INTO shops VALUES ('Susan', 'Dairy', 'Downtown');
-- delete function
DELETE supplier FROM supplier
INNER JOIN shops ON supplier.category = shops.shptype
WHERE supplier.location != shops.location;
Das obige ordnet alle Lieferanten Shops nach Standort zu, in diesem Fall Innenstadt
, und löscht alle Zeilen aus der Lieferantentabelle, die den Kriterien nicht entsprechen.
Aus dem folgenden SELECT
-Versuch können wir ersehen, dass die supplier
-Tabelle nur noch Lieferanten enthält, die als Downtown
aufgeführt sind:
SELECT * FROM supplier
Ergebnis: