Suche…


Einführung

Die DELETE-Anweisung wird zum Löschen von Datensätzen aus einer Tabelle verwendet.

Syntax

  1. DELETE FROM TableName [WHERE- Bedingung ] [LIMIT- Anzahl ]

LÖSCHEN Sie bestimmte Zeilen mit WHERE

Dadurch werden alle Zeilen gelöscht, die den WHERE Kriterien entsprechen.

DELETE FROM Employees
WHERE FName = 'John'

LÖSCHEN Sie alle Zeilen

Wenn Sie eine WHERE Klausel weglassen, werden alle Zeilen aus einer Tabelle gelöscht.

DELETE FROM Employees

In der TRUNCATE- Dokumentation finden Sie Details dazu, wie die Leistung von TRUNCATE verbessert werden kann, da Trigger, Indizes und Protokolle zum Löschen der Daten ignoriert werden.

TRUNCATE-Klausel

Verwenden Sie dies, um die Tabelle in den Zustand zurückzusetzen, in dem sie erstellt wurde. Dadurch werden alle Zeilen gelöscht und Werte wie das automatische Inkrementieren zurückgesetzt. Es protokolliert auch nicht jede einzelne Zeilenlöschung.

TRUNCATE TABLE Employees

LÖSCHEN Sie bestimmte Zeilen basierend auf Vergleichen mit anderen Tabellen

Es ist möglich, Daten aus einer Tabelle zu DELETE wenn sie mit bestimmten Daten in anderen Tabellen übereinstimmen (oder nicht übereinstimmen).

Nehmen wir an, wir wollen Daten von Source DELETE sobald sie in Target geladen sind.

DELETE FROM Source
WHERE  EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )

Die meisten gängigen RDBMS-Implementierungen (z. B. MySQL, Oracle, PostgresSQL, Teradata) ermöglichen das Verknüpfen von Tabellen während DELETE was einen komplexeren Vergleich in einer kompakten Syntax ermöglicht.

Nehmen wir an, das Aggregat wird einmal täglich aus Target erstellt und enthält nicht dieselbe ID, sondern dasselbe Datum. Nehmen wir an, dass wir Daten von Quelle gelöscht werden soll erst nach dem Aggregat für den Tag aufgefüllt wird.

Auf MySQL, Oracle und Teradata kann dies mit folgendem geschehen:

DELETE FROM Source
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.Date = AggregateSchema.Aggregate.Date

In PostgreSQL verwenden Sie:

DELETE FROM Source
USING  TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Dies führt im Wesentlichen zu INNER JOINs zwischen Quelle, Ziel und Aggregat. Die Löschung wird für Source ausgeführt, wenn die gleichen IDs im Ziel-UND-Datum vorhanden sind, das für diese IDs im Target vorhanden ist. Diese IDs sind auch in Aggregat vorhanden.

Dieselbe Abfrage kann auch (auf MySQL, Oracle, Teradata) geschrieben werden als:

DELETE Source
FROM   Source, TargetSchema.Target, AggregateSchema.Aggregate
WHERE  Source.ID = TargetSchema.Target.ID
       AND TargetSchema.Target.DataDate = AggregateSchema.Aggregate.AggDate

Explizite Joins können in Delete Anweisungen in einigen RDBMS-Implementierungen (z. B. Oracle, MySQL) erwähnt werden, werden jedoch nicht auf allen Plattformen unterstützt (z. B. unterstützt Teradata diese nicht).

Vergleiche können entworfen werden, um nicht übereinstimmende Szenarien mit allen NOT EXISTS ( NOT EXISTS )

DELETE FROM Source
WHERE NOT EXISTS ( SELECT 1 -- specific value in SELECT doesn't matter
               FROM Target
               Where Source.ID = Target.ID )


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow