Czasami może być konieczne zaktualizowanie kolumny w tabeli na podstawie wartości innej kolumny w tabeli. Oto jak zaktualizować kolumnę na podstawie innej kolumny w SQL Server, MySQL, PostgreSQL.
Jak zaktualizować kolumnę na podstawie innej kolumny w SQL
Oto kroki, aby zaktualizować kolumnę na podstawie innej kolumny w SQL.
Załóżmy, że masz następującą tabelę pracownicy(id, imię, nazwisko)
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 | +------+------------+-----------+
Istnieją dwa sposoby aktualizacji kolumny na podstawie wartości innej kolumny – za pomocą klauzuli WHERE i za pomocą instrukcji CASE.
Aktualizuj kolumnę na podstawie innej kolumny przy użyciu klauzuli WHERE
Oto zapytanie SQL, aby zaktualizować imię kolumna oparta na wartości kolumn id przy użyciu klauzuli 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 | +------+------------+-----------+
W powyższej instrukcji instrukcja UPDATE najpierw wybierze wiersze zgodne z klauzulą WHERE i zaktualizuje wartość naszej kolumny first_name
Możesz również użyć operatorów logicznych, takich jak AND/OR w klauzuli WHERE, jak pokazano poniżej.
mysql> update employees set first_name='Tim' where id=1 or id=3;
Możesz również użyć operatora IN w klauzuli WHERE, jak pokazano poniżej.
mysql> update employees set first_name='Tim' where id in (1,3);
Możesz również użyć innego zapytania SELECT w klauzuli WHERE, jak pokazano poniżej.
mysql> update employees set first_name='Tim' where id in ( select id from emp2 );
W takim przypadku wszystkie wiersze, których wartość id pasuje do jednej z wartości zwracanych przez zapytanie SELECT, zostaną zaktualizowane.
Aktualizuj kolumnę na podstawie innej kolumny za pomocą instrukcji CASE
Oto zapytanie SQL, aby zaktualizować imię kolumna na podstawie wartości id kolumna za pomocą instrukcji 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 | +------+------------+-----------+
Używamy instrukcji CASE, aby określić nową wartość first_name kolumna dla każdej wartości id kolumna. Jest to znacznie lepsze podejście niż użycie klauzuli WHERE, ponieważ za pomocą klauzuli WHERE możemy zmienić wartość kolumny tylko na jedną nową wartość. Za pomocą instrukcji CASE możemy zaktualizować wartość naszej kolumny do różnych wartości, w zależności od indywidualnych wartości kolumny id.
Przeczytaj także:Jak naprawić nieprawidłową wartość ciągu w MySQL
Aktualizuj kolumnę na podstawie innej tabeli
Możesz także zaktualizować kolumnę w jednej tabeli z innej kolumny w innej tabeli. Powiedzmy, że masz też inną tabelę emp2(id, name_name, last_name) i chcesz zaktualizować imię w pracownikach tabela na imię w emp2 stół. Obie tabele mają również ten sam id wartości kolumn.
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 | +------+------------+-----------+
Przeczytaj także:Najlepsze blogi MySQL dla administratorów baz danych
W takim przypadku możesz użyć następującej składni instrukcji UPDATE, aby zaktualizować kolumnę z jednej tabeli na podstawie wartości innej tabeli.
UPDATE first_table, second_table
SET first_table.column1 = second_table.column2
WHERE first_table.id = second_table.table_id;
Oto zapytanie SQL do zaktualizowania imię kolumna w pracownikach tabela na imię kolumna w emp2 tabela.
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 ułatwia wizualizację danych i monitorowanie ich w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj Ubiq za darmo.