Beispiele für UPDATE Aussagen - 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.

Beispiele für UPDATE Aussagen

Weitere Hinweise zu den Tabellen, die in den folgenden Beispielen verwendet werden, finden Sie unter Beispieldatenbank.

Die CATEGORY Tabelle in der TICKIT Datenbank enthält die folgenden Zeilen:

+-------+----------+-----------+--------------------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+-----------+--------------------------------------------+ | 5 | Sports | MLS | Major League Soccer | | 11 | Concerts | Classical | All symphony, concerto, and choir concerts | | 1 | Sports | MLB | Major League Baseball | | 6 | Shows | Musicals | Musical theatre | | 3 | Sports | NFL | National Football League | | 8 | Shows | Opera | All opera and light opera | | 2 | Sports | NHL | National Hockey League | | 9 | Concerts | Pop | All rock and pop music concerts | | 4 | Sports | NBA | National Basketball Association | | 7 | Shows | Plays | All non-musical theatre | | 10 | Concerts | Jazz | All jazz singers and bands | +-------+----------+-----------+--------------------------------------------+

Aktualisieren einer Tabelle auf der Basis eines Bereichs von Werten

Aktualisieren Sie die CATGROUP Spalte auf der Grundlage eines Wertebereichs in der CATID Spalte.

UPDATE category SET catgroup='Theatre' WHERE catid BETWEEN 6 AND 8; SELECT * FROM category WHERE catid BETWEEN 6 AND 8; +-------+----------+----------+---------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+----------+---------------------------+ | 6 | Theatre | Musicals | Musical theatre | | 7 | Theatre | Plays | All non-musical theatre | | 8 | Theatre | Opera | All opera and light opera | +-------+----------+----------+---------------------------+

Aktualisieren einer Tabelle auf der Basis eines aktuellen Werts

Aktualisieren Sie die CATDESC Spalten CATNAME und auf der Grundlage ihres aktuellen CATGROUP Werts:

UPDATE category SET catdesc=default, catname='Shows' WHERE catgroup='Theatre'; SELECT * FROM category WHERE catname='Shows'; +-------+----------+---------+---------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------+ | 6 | Theatre | Shows | NULL | | 7 | Theatre | Shows | NULL | | 8 | Theatre | Shows | NULL | +-------+----------+---------+---------+)

In diesem Fall wurde die CATDESC Spalte auf Null gesetzt, da bei der Erstellung der Tabelle kein Standardwert definiert wurde.

Führen Sie die folgenden Befehle aus, um die CATEGORY Tabellendaten auf die ursprünglichen Werte zurückzusetzen:

TRUNCATE category; COPY category FROM 's3://redshift-downloads/tickit/category_pipe.txt' DELIMITER '|' IGNOREHEADER 1 REGION 'us-east-1' IAM_ROLE default;

Aktualisierung einer Tabelle auf der Grundlage des Ergebnisses einer WHERE Klausel-Unterabfrage

Aktualisieren Sie die CATEGORY Tabelle auf der Grundlage des Ergebnisses einer Unterabfrage in der WHERE Klausel:

UPDATE category SET catdesc='Broadway Musical' WHERE category.catid IN (SELECT category.catid FROM category JOIN event ON category.catid = event.catid JOIN venue ON venue.venueid = event.venueid JOIN sales ON sales.eventid = event.eventid WHERE venuecity='New York City' AND catname='Musicals');

Zeigen Sie die aktualisierte Tabelle an:

SELECT * FROM category ORDER BY catid; +-------+----------+-----------+--------------------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+-----------+--------------------------------------------+ | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | | 6 | Shows | Musicals | Broadway Musical | | 7 | Shows | Plays | All non-musical theatre | | 8 | Shows | Opera | All opera and light opera | | 9 | Concerts | Pop | All rock and pop music concerts | | 10 | Concerts | Jazz | All jazz singers and bands | | 11 | Concerts | Classical | All symphony, concerto, and choir concerts | +-------+----------+-----------+--------------------------------------------+

Aktualisierung einer Tabelle auf der Grundlage des Ergebnisses einer WITH Klausel-Unterabfrage

Verwenden Sie das CATEGORY folgende Beispiel, um die Tabelle auf der Grundlage des Ergebnisses einer Unterabfrage zu aktualisieren, die die WITH Klausel verwendet.

WITH u1 as (SELECT catid FROM event ORDER BY catid DESC LIMIT 1) UPDATE category SET catid='200' FROM u1 WHERE u1.catid=category.catid; SELECT * FROM category ORDER BY catid DESC LIMIT 1; +-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 200 | Concerts | Pop | All rock and pop music concerts | +-------+----------+---------+---------------------------------+

Aktualisieren einer Tabelle auf der Basis des Ergebnisses einer Join-Bedingung

Aktualisieren Sie die ursprünglichen 11 Zeilen in der CATEGORY Tabelle auf der Grundlage übereinstimmender CATID Zeilen in der EVENT Tabelle:

UPDATE category SET catid=100 FROM event WHERE event.catid=category.catid; SELECT * FROM category ORDER BY catid; +-------+----------+-----------+--------------------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+-----------+--------------------------------------------+ | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | | 10 | Concerts | Jazz | All jazz singers and bands | | 11 | Concerts | Classical | All symphony, concerto, and choir concerts | | 100 | Concerts | Pop | All rock and pop music concerts | | 100 | Shows | Plays | All non-musical theatre | | 100 | Shows | Opera | All opera and light opera | | 100 | Shows | Musicals | Broadway Musical | +-------+----------+-----------+--------------------------------------------+

Beachten Sie, dass die EVENT Tabelle in der FROM Klausel aufgeführt ist und die Join-Bedingung mit der Zieltabelle in der WHERE Klausel definiert ist. Für die Aktualisierung wurden nur vier Zeilen qualifiziert. Diese vier Zeilen sind die Zeilen, deren CATID Werte ursprünglich 6, 7, 8 und 9 waren; nur diese vier Kategorien sind in der EVENT Tabelle vertreten:

SELECT DISTINCT catid FROM event; +-------+ | catid | +-------+ | 6 | | 7 | | 8 | | 9 | +-------+

Aktualisieren Sie die ursprünglichen 11 Zeilen in der CATEGORY Tabelle, indem Sie das vorherige Beispiel erweitern und der WHERE Klausel eine weitere Bedingung hinzufügen. Aufgrund der Beschränkung der CATGROUP Spalte kommt nur eine Zeile für die Aktualisierung in Frage (obwohl vier Zeilen für die Verknüpfung in Frage kommen).

UPDATE category SET catid=100 FROM event WHERE event.catid=category.catid AND catgroup='Concerts'; SELECT * FROM category WHERE catid=100; +-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 100 | Concerts | Pop | All rock and pop music concerts | +-------+----------+---------+---------------------------------+

Eine alternative Möglichkeit, dieses Beispiel zu schreiben, ist:

UPDATE category SET catid=100 FROM event JOIN category cat ON event.catid=cat.catid WHERE cat.catgroup='Concerts';

Der Vorteil dieses Ansatzes besteht darin, dass die Join-Kriterien klar von allen anderen Kriterien getrennt sind, die Zeilen für die Aktualisierung qualifizieren. Beachten Sie die Verwendung des Alias CAT für die CATEGORY Tabelle in der FROM Klausel.

Aktualisierungen mit äußeren Verknüpfungen in der FROM Klausel

Das vorherige Beispiel zeigte einen inneren Join, der in der FROM Klausel einer UPDATE Anweisung angegeben wurde. Im folgenden Beispiel wird ein Fehler zurückgegeben, da die FROM Klausel keine äußeren Verknüpfungen zur Zieltabelle unterstützt:

UPDATE category SET catid=100 FROM event LEFT JOIN category cat ON event.catid=cat.catid WHERE cat.catgroup='Concerts'; ERROR: Target table must be part of an equijoin predicate

Wenn der Outer-Join für die UPDATE Anweisung erforderlich ist, können Sie die Outer-Join-Syntax in eine Unterabfrage verschieben:

UPDATE category SET catid=100 FROM (SELECT event.catid FROM event LEFT JOIN category cat ON event.catid=cat.catid) eventcat WHERE category.catid=eventcat.catid AND catgroup='Concerts';

Aktualisierungen mit Spalten aus einer anderen Tabelle in der Klausel SET

Um das zu aktualisieren listing Tabelle in der TICKIT Beispieldatenbank mit Werten aus sales Tabelle, verwenden Sie das folgende Beispiel.

SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5; +--------+------------+ | listid | numtickets | +--------+------------+ | 100423 | 4 | | 108334 | 24 | | 117150 | 4 | | 135915 | 20 | | 205927 | 6 | +--------+------------+ UPDATE listing SET numtickets = sales.sellerid FROM sales WHERE sales.sellerid = 1 AND listing.sellerid = sales.sellerid; SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5; +--------+------------+ | listid | numtickets | +--------+------------+ | 100423 | 1 | | 108334 | 1 | | 117150 | 1 | | 135915 | 1 | | 205927 | 1 | +--------+------------+