Löschen mit Join in MySQL

Raymond Peter 15 Februar 2024
  1. Einschränkungen bei der Verwendung der DELETE FROM-Anweisung in MySQL
  2. Verwenden der INNER JOIN-Methode in MySQL
  3. Das Endergebnis bei der Verwendung von JOIN zum Löschen mit MySQL
Löschen mit Join in 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:

löschen mit join in mysql

Verwandter Artikel - MySQL Join