Database
 sql >> Datenbank >  >> RDS >> Database

So aktualisieren Sie eine Spalte basierend auf einem Filter einer anderen Spalte

In diesem Lernprogramm gehen wir die verschiedenen Möglichkeiten zum Aktualisieren von Zeilen in einer Tabelle mit SQL durch, wobei wir von allgemeineren Aktualisierungen zu spezifischeren Methoden übergehen.

Vollständiges Update

Wenn jedes Feld auf denselben Wert aktualisiert werden muss, können Sie dies mit einem einfachen UPDATE tun Befehl.

UPDATE table
SET col = new_value;

Bedingtes Update

Um eine bedingte Aktualisierung abhängig davon durchzuführen, ob der aktuelle Wert einer Spalte der Bedingung entspricht, können Sie ein WHERE hinzufügen Klausel, die dies festlegt. Die Datenbank findet zuerst Zeilen, die mit WHERE übereinstimmen -Klausel und führen Sie dann nur Aktualisierungen für diese Zeilen durch.

UPDATE table
SET col = new_value
WHERE col = old_value;

Um dies zu erweitern, können Sie dem WHERE alles hinzufügen Klausel, die Ihnen gefällt, solange es sich um einen gültigen Ausdruck handelt. Um also eine Aktualisierung basierend auf dem Wert einer anderen Spalte in derselben Tabelle durchzuführen, könnten Sie Folgendes ausführen:

UPDATE table
SET col = new_value
WHERE other_col = some_other_value;

Da das WHERE -Klausel jeden gültigen Ausdruck enthalten kann, haben Sie auch die Möglichkeit, Aktualisierungen vorzunehmen, wenn mehrere Spalten die Kriterien erfüllen

UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;

UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;

Wie Sie sehen können, können Sie WHERE erweitern -Klausel so oft Sie möchten, um die Zeilen für die Aktualisierung auf das zu filtern, was Sie benötigen.

Was passiert nun, wenn Sie Zeilen in einer Tabelle basierend auf dem Zustand einer anderen Tabelle aktualisieren möchten? Diese Frage führt zu einigen verschiedenen Möglichkeiten, wie Sie dies tun könnten.

Da das WHERE -Klausel jeden gültigen Ausdruck enthalten kann, könnten Sie eine Unterabfrage verwenden:

UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);

Sie können auch eine Unterabfrage im SET verwenden Teil der Anweisung, wenn Sie die Spalte auf einen Wert in einer anderen Tabelle setzen möchten

UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);

Vielleicht ist es einfacher, mehrere Tabellen nach dem UPDATE anzugeben Klausel. Nur das SET Der Ausdruck führt Aktualisierungen durch, aber das Auflisten zusätzlicher Tabellen ermöglicht das Einschließen der Tabellen.

UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;

Ähnlich wie beim Erweitern von WHERE -Klausel kann die Anzahl der Tabellen erweitert werden, um alle Tabellen einzuschließen, die Sie benötigen, wenn Sie mehrere Tabellen haben, die verknüpft werden müssen.