sql >> Databáze >  >> RDS >> Database

Jak aktualizovat sloupec na základě jiného sloupce v SQL

Někdy může být nutné aktualizovat sloupec v tabulce na základě hodnoty jiného sloupce v tabulce. Zde je návod, jak aktualizovat sloupec na základě jiného sloupce v SQL Server, MySQL, PostgreSQL.


Jak aktualizovat sloupec založený na jiném sloupci v SQL

Zde jsou kroky k aktualizaci sloupce na základě jiného sloupce v SQL.

Řekněme, že máte následující tabulku 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       |
+------+------------+-----------+

Existují dva způsoby, jak aktualizovat sloupec na základě hodnoty jiného sloupce – pomocí klauzule WHERE a pomocí příkazu CASE.


Aktualizujte sloupec na základě jiného sloupce pomocí klauzule WHERE

Zde je dotaz SQL pro aktualizaci first_name sloupec na základě hodnoty sloupců id pomocí klauzule WHERE.

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

Ve výše uvedeném příkazu příkaz UPDATE nejprve vybere řádky, které odpovídají klauzuli WHERE, a aktualizuje hodnotu našeho sloupce first_name

V klauzuli WHERE můžete také použít logické operátory jako AND/OR, jak je uvedeno níže.

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

Můžete také použít operátor IN v klauzuli WHERE, jak je uvedeno níže.

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

Ve své klauzuli WHERE můžete také použít jiný dotaz SELECT, jak je znázorněno níže.

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

V tomto případě budou aktualizovány všechny ty řádky, jejichž hodnota id odpovídá jedné z hodnot vrácených dotazem SELECT.


Aktualizovat sloupec na základě jiného sloupce pomocí příkazu CASE

Zde je dotaz SQL pro aktualizaci first_name sloupec na základě hodnoty id pomocí příkazu CASE.

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

K zadání nové hodnoty first_name používáme příkaz CASE sloupec pro každou hodnotu id sloupec. Toto je mnohem lepší přístup než použití klauzule WHERE, protože pomocí klauzule WHERE můžeme změnit hodnotu sloupce pouze na jednu novou hodnotu. Pomocí příkazu CASE můžeme aktualizovat hodnotu našeho sloupce na různé hodnoty v závislosti na jednotlivých hodnotách sloupce id.

Přečtěte si také:Jak opravit nesprávnou hodnotu řetězce v MySQL


Aktualizovat sloupec na základě jiné tabulky

Můžete také aktualizovat sloupec v jedné tabulce z jiného sloupce v jiné tabulce. Řekněme, že máte také další tabulku emp2(id, first_name, last_name) a chcete aktualizovat first_name v zaměstnancích tabulky na first_name v emp2 stůl. Obě tabulky mají také stejné id hodnoty sloupce.

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

Přečtěte si také:Nejlepší blogy MySQL pro správce databází

V takovém případě můžete použít následující syntaxi příkazu UPDATE k aktualizaci sloupce z jedné tabulky na základě hodnoty jiné tabulky.

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

Zde je dotaz SQL pro aktualizaci first_name ve sloupci zaměstnanci tabulky na first_name sloupec v emp2 tabulka.

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 usnadňuje vizualizaci dat a jejich sledování na řídicích panelech v reálném čase. Vyzkoušejte Ubiq zdarma.

  1. Datový model životního pojištění

  2. Použití pseudosloupců s propojeným serverem

  3. Byla zadána neplatná adresa URL Oracle:OracleDataSource.makeURL

  4. Co dělá transakce kolem jednoho výpisu?