sql >> Database >  >> RDS >> Database

Een kolom bijwerken op basis van een andere kolom in SQL

Soms moet u een kolom in de tabel bijwerken op basis van de waarde van een andere kolom in de tabel. Hier leest u hoe u een kolom bijwerkt op basis van een andere kolom in SQL Server, MySQL, PostgreSQL.


Een kolom bijwerken op basis van een andere kolom in SQL

Hier zijn de stappen om een ​​kolom bij te werken op basis van een andere kolom in SQL.

Stel dat u de volgende tabel werknemers(id, first_name, last_name) heeft

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       |
+------+------------+-----------+

Er zijn twee manieren om de kolom bij te werken op basis van de waarde van een andere kolom:met behulp van de WHERE-clausule en met de CASE-instructie.


Kolom bijwerken op basis van een andere kolom met behulp van de WHERE-clausule

Hier is de SQL-query om first_name bij te werken kolom gebaseerd op waarde van id-kolommen met behulp van de WHERE-clausule.

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 de bovenstaande instructie selecteert de UPDATE-instructie eerst rijen die overeenkomen met de WHERE-clausule en de updatewaarde van onze kolom first_name

U kunt ook logische operatoren zoals AND/OR gebruiken in uw WHERE-component, zoals hieronder weergegeven.

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

U kunt ook een IN-operator gebruiken in de WHERE-component, zoals hieronder weergegeven.

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

U kunt ook een andere SELECT-query gebruiken in uw WHERE-component, zoals hieronder wordt weergegeven.

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

In dit geval worden alle rijen waarvan de id-waarde overeenkomt met een van de waarden die worden geretourneerd door de SELECT-query, bijgewerkt.


Kolom bijwerken op basis van een andere kolom met CASE-instructie

Hier is de SQL-query om first_name bij te werken kolom gebaseerd op waarde van id kolom met CASE-instructie.

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       |
+------+------------+-----------+

We gebruiken een CASE-instructie om de nieuwe waarde van first_name op te geven kolom voor elke waarde van id kolom. Dit is een veel betere benadering dan het gebruik van de WHERE-clausule, omdat we met de WHERE-clausule slechts een kolomwaarde kunnen wijzigen in één nieuwe waarde. Met de CASE-instructie kunnen we onze kolomwaarde bijwerken naar verschillende waarden, afhankelijk van de individuele waarden van de id-kolom.

Lees ook:Hoe u een onjuiste tekenreekswaarde in MySQL kunt herstellen


Kolom bijwerken op basis van een andere tabel

U kunt ook een kolom in de ene tabel bijwerken vanuit een andere kolom in een andere tabel. Laten we zeggen dat u ook een andere tabel heeft emp2(id, first_name, last_name) en je wilt first_name . updaten bij werknemers tabel naar first_name in emp2 tafel. Beide tabellen hebben ook dezelfde id kolom waarden.

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      |
+------+------------+-----------+

Lees ook:Top MySQL-blogs voor databasebeheerders

In een dergelijk geval kunt u de volgende syntaxis van de UPDATE-instructie gebruiken om de kolom van de ene tabel bij te werken op basis van de waarde van een andere tabel.

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

Hier is een SQL-query om first_name bij te werken kolom in werknemers tabel naar first_name kolom in emp2 tafel.

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 maakt het eenvoudig om data te visualiseren en te monitoren in realtime dashboards. Probeer Ubiq gratis.

  1. Android:Sqlite-fout - (1) bijna null:syntaxisfout

  2. Wat zijn databasegebruikersrechten?

  3. MySQL ISNULL() uitgelegd

  4. De Oracle-instantie afsluiten en starten