Update mehrere Spalten einer Tabelle bedingt in einem einzigen Befehl
Ich habe eine Tabelle, die Spalten enthält name
, client_name
und requester_name
. Ich brauche zu aktualisieren, die Werte dieser Spalten von "Mic" zu "Michael".
Hier sind einige Datensätze, die aktualisiert werden sollten:
name | client_name | requester_name
------+-------------+----------------
Mic | Jerry | Jack
Jack | Mic | Mic
Jerry | Jack | Mic
Ich habe versucht, die folgende Abfrage:
UPDATE names
SET name='Michael', client_name='Michael', requester_name='Michael'
WHERE name='Mic' OR client_name='Mic' OR requester_name='Mic';
Diese Abfrage stellt alle Spalten ändern, alle Namen zu "Michael".
Was sollte die Abfrage Aussehen, um nur die änderungen gelten, wo anwendbar?
- Natürlich tut Sie das, weil Sie alle Spalten in der
SET
- Klausel. - Gibt es einen Grund hat es zu sein, eine einzelne Anweisung anstelle von 3 (1 für jede Spalte)?
- Ja, es sind mehrere Tabellen mit gleich situation, in denen Werte geändert werden sollen, auf die bestimmte Bedingung. Und ich wurde nicht gefragt zu generieren, die eine Menge von kurzen Abfragen 🙁
- sind Sie auf der Suche nach den Wert-Buchse Mic Mic geändert werden, um Jack Michael, oder einfach nur Michael?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es ratsam, fügen Sie ein
WHERE
- Klausel.Sonst die ganze Tabelle wird aktualisiert werden, bedingungslos. Updates, ändern Sie die Werte auf den gleichen Wert noch updates erstellen von Toten Zeilen, das auslösen von Triggern und so weiter. Während die resultierenden Zeilen nicht falsch wäre, wäre es immer noch aufblasen der Tabelle auf das doppelte seiner Größe, so dass
VACUUM
notwendig, und werden in der Regel sehr langsam.BTW, entweder in form der
CASE
Aussage ist hier gut.Nicht sehr elegant, nicht sehr effizient, aber in einer Abfrage:
Diese verwendet die abgekürzte
(Postgresql-spezifisch)syntax FALL.(BTW: ich glaube, du meintest 'Michael' anstelle von 'Micheal'?)