DELETE - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DELETE

Löscht Zeilen aus Tabellen.

Anmerkung

Die maximal zulässige Größe für eine einzelne SQL-Anweisung ist 16 MB.

Syntax

[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] DELETE [ FROM ] { table_name | materialized_view_name } [ { USING } table_name, ... ] [ WHERE condition ]

Parameter

WITH-Klausel

Optionale Klausel, die eine oder mehrere Klausel angibt. common-table-expressions Siehe WITH-Klausel.

FROM

Das Schlüsselwort FROM ist optional, außer in den Fällen, in denen die USING-Klausel angegeben ist. Die Anweisungen delete from event; und delete event; sind gleichwertige Operationen, die alle Zeilen aus der Tabelle EVENT entfernen.

Anmerkung

Um alle Zeilen in einer Tabelle zu löschen, führen Sie für die Tabelle den Befehl TRUNCATE aus. TRUNCATE ist sehr viel effizienter als DELETE und erfordert weder VACUUM noch ANALYZE. Denken Sie jedoch daran, dass TRUNCATE ein Commit für die Transaktion ausführt, in der er ausgeführt wird.

table_name

Eine temporäre oder persistente Tabelle. Nur der Besitzer der Tabelle oder ein Benutzer mit dem Recht DELETE für die Tabelle können Zeilen aus der Tabelle löschen.

Sie sollten den Befehl TRUNCATE für schnelle, nicht qualifizierte Löschoperationen für große Tabellen verwenden; siehe TRUNCATE.

Anmerkung

Nach dem Löschen einer großen Zahl von Zeilen aus einer Tabelle:

  • Führen Sie eine Vacuum-Operation für die Tabelle durch, um Speicherplatz zurückzugewinnen und die Zeilen neu zu sortieren.

  • Analysieren Sie die Tabelle, um Statistiken für den Abfrageplaner zu aktualisieren.

materialized_view_name

Eine materialisierte Ansicht. Die DELETE-Anweisung funktioniert in einer materialisierten Ansicht, die für Streaming-Aufnahme in eine materialisierte Ansicht benutzt wird. Nur der Besitzer der materialisierten Ansicht oder ein Benutzer mit DELETE-Privilegien für die materialisierte Ansicht kann Zeilen daraus löschen.

Sie können DELETE nicht für eine materialisierte Ansicht zur Streaming-Aufnahme mit einer RLS-Richtlinie (Row Level Security) ausführen, für die dem Benutzer nicht die Berechtigung IGNORE RLS erteilt wurde. Es gibt eine Ausnahme: Wenn dem Benutzer, der den Löschvorgang ausführt, die Option IGNORE RLS gewährt wurde, wird der Vorgang erfolgreich ausgeführt. Weitere Informationen finden Sie unter Eigentümerschaft und Verwaltung von RLS-Richtlinien.

USING table_name, ...

Das Schlüsselwort USING wird verwendet, um eine Tabellenliste einzuführen, wenn in der WHERE-Klauselbedingung zusätzliche Tabellen referenziert werden. Die folgende Anweisung löscht beispielsweise alle Zeilen aus der Tabelle EVENT, die die Join-Bedingung für die Tabellen EVENT und SALES erfüllen. Die Tabelle SALES muss in der Liste FROM explizit genannt werden:

delete from event using sales where event.eventid=sales.eventid;

Wenn Sie den Namen der Zieltabelle in der USING-Klausel wiederholen, führt die DELETE-Operation einen Self-Join aus. Sie können anstelle der USING-Syntax eine Unterabfrage in der WHERE-Klausel verwenden, um die gleiche Abfrage auf eine andere Art zu schreiben.

WHERE condition

Optionale Klausel, die das Löschen von Zeilen auf die Zeilen einschränkt, die der Bedingung entsprechen. Bei der Bedingung kann es sich beispielsweise um eine Einschränkung für eine Spalte, eine Join-Bedingung oder eine Bedingung auf der Basis eines Abfrageergebnisses handeln. Die Abfrage kann andere Tabellen als das Ziel des Befehls DELETE referenzieren. Beispiel:

delete from t1 where col1 in(select col2 from t2);

Wenn keine Bedingung angegeben wird, werden alle Zeilen in der Tabelle gelöscht.

Beispiele

Löschen aller Zeilen aus der Tabelle CATEGORY:

delete from category;

Löschen von Zeilen mit CATID-Werten zwischen 0 und 9 aus der Tabelle CATEGORY:

delete from category where catid between 0 and 9;

Löschen von Zeilen aus der Tabelle LISTING, deren SELLERID-Werte in der Tabelle SALES nicht vorhanden sind:

delete from listing where listing.sellerid not in(select sales.sellerid from sales);

Die folgenden beiden Abfragen löschen jeweils eine einzelne Zeile aus der Tabelle CATEGORY, basierend auf einem Join mit der Tabelle EVENT und einer zusätzlichen Einschränkung für die Spalte CATID:

delete from category using event where event.catid=category.catid and category.catid=9;
delete from category where catid in (select category.catid from category, event where category.catid=event.catid and category.catid=9);

Die folgende Abfrage löscht alle Zeilen aus der mv_cities materialisierten Ansicht. Der hier verwendete Name der materialisierten Ansicht ist ein Beispiel:

delete from mv_cities;