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

So aktualisieren Sie eine Spalte basierend auf einer anderen Spalte in SQL

Manchmal müssen Sie möglicherweise eine Spalte in der Tabelle basierend auf dem Wert einer anderen Spalte in der Tabelle aktualisieren. So aktualisieren Sie eine Spalte basierend auf einer anderen Spalte in SQL Server, MySQL, PostgreSQL.


So aktualisieren Sie eine Spalte basierend auf einer anderen Spalte in SQL

Hier sind die Schritte zum Aktualisieren einer Spalte basierend auf einer anderen Spalte in SQL.

Angenommen, Sie haben die folgende Tabelle employees(id, first_name, last_name)

mysql> create table employees(id int, 
      first_name varchar(255),
      last_name varchar(255));

mysql> insert into employees(id, first_name, last_name)
       values(1,'John','Doe'),
       (2,'Jane','Doe');

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | John       | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+

Es gibt zwei Möglichkeiten, eine Spalte basierend auf dem Wert einer anderen Spalte zu aktualisieren – mit der WHERE-Klausel und mit der CASE-Anweisung.


Spalte basierend auf einer anderen Spalte mit WHERE-Klausel aktualisieren

Hier ist die SQL-Abfrage zum Aktualisieren von first_name Spalte basierend auf dem Wert der ID-Spalten unter Verwendung der WHERE-Klausel.

mysql> update employees
       set first_name='Tim'
       where id=1;
mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Jane       | Doe       |
+------+------------+-----------+

In der obigen Anweisung wählt die UPDATE-Anweisung zuerst Zeilen aus, die mit der WHERE-Klausel übereinstimmen, und aktualisiert den Wert unserer Spalte first_name

Sie können auch logische Operatoren wie AND/OR in Ihrer WHERE-Klausel verwenden, wie unten gezeigt.

Mitarbeiter von
mysql> update employees
       set first_name='Tim'
       where id=1 or id=3;

Sie können auch einen IN-Operator in der WHERE-Klausel verwenden, wie unten gezeigt.

mysql> update employees
       set first_name='Tim'
       where id in (1,3);

Sie können auch eine andere SELECT-Abfrage in Ihrer WHERE-Klausel verwenden, wie unten gezeigt.

mysql> update employees
       set first_name='Tim'
       where id in ( select id from emp2 );

In diesem Fall werden alle Zeilen aktualisiert, deren ID-Wert mit einem der von der SELECT-Abfrage zurückgegebenen Werte übereinstimmt.


Spalte basierend auf einer anderen Spalte mit CASE-Anweisung aktualisieren

Hier ist die SQL-Abfrage zum Aktualisieren von first_name Spalte basierend auf dem Wert von id Spalte mit CASE-Anweisung.

mysql> update employees
     set first_name = (CASE
                           WHEN id = 1
                             THEN 'Tim'
                           WHEN id = 2
                             THEN 'Dave'
                           END);

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Tim        | Doe       |
|    2 | Dave       | Doe       |
+------+------------+-----------+

Wir verwenden eine CASE-Anweisung, um den neuen Wert von first_name anzugeben Spalte für jeden Wert von id Säule. Dies ist ein viel besserer Ansatz als die Verwendung der WHERE-Klausel, da wir mit der WHERE-Klausel nur einen Spaltenwert in einen neuen Wert ändern können. Mit der CASE-Anweisung können wir unseren Spaltenwert auf verschiedene Werte aktualisieren, abhängig von den einzelnen Werten der ID-Spalte.

Lesen Sie auch:So beheben Sie einen falschen Zeichenfolgenwert in MySQL


Spalte basierend auf einer anderen Tabelle aktualisieren

Sie können auch eine Spalte in einer Tabelle aus einer anderen Spalte in einer anderen Tabelle aktualisieren. Nehmen wir an, Sie haben auch eine andere Tabelle emp2(id, first_name, last_name) und Sie first_name aktualisieren möchten bei Mitarbeitern Tabelle zu Vorname in emp2 Tisch. Beide Tabellen haben auch dieselbe id Spaltenwerte.

mysql> create table emp2(id int,
       first_name varchar(255),
       last_name varchar(255));

mysql> insert into emp2(id, first_name, last_name)
            values(1,'Don','Stone'),
            (2,'Jim','Stew');

mysql> select * from emp2;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Stone     |
|    2 | Jim        | Stew      |
+------+------------+-----------+

Lesen Sie auch:Die besten MySQL-Blogs für Datenbankadministratoren

In einem solchen Fall können Sie die folgende UPDATE-Anweisungssyntax verwenden, um die Spalte aus einer Tabelle basierend auf dem Wert einer anderen Tabelle zu aktualisieren.

UPDATE first_table, second_table 
SET first_table.column1 = second_table.column2 
WHERE first_table.id = second_table.table_id;

Hier ist eine SQL-Abfrage zum Aktualisieren von first_name Spalte in Mitarbeiter Tabelle zu Vorname Spalte in emp2 Tabelle.

mysql> UPDATE employees, emp2
SET employees.first_name = emp2.first_name
WHERE employees.id = emp2.id;

mysql> select * from employees;
+------+------------+-----------+
| id   | first_name | last_name |
+------+------------+-----------+
|    1 | Don        | Doe       |
|    2 | Jim        | Doe       |
+------+------------+-----------+

Ubiq macht es einfach, Daten zu visualisieren und sie in Echtzeit-Dashboards zu überwachen. Testen Sie Ubiq kostenlos.