В този урок ще разгледаме различните начини за актуализиране на редове в таблица с помощта на SQL, преминавайки от по-общи актуализации към по-специфични методи.
Пълна актуализация
Ако всяко поле трябва да бъде актуализирано до една и съща стойност, можете да направите това с помощта на проста UPDATE
команда.
UPDATE table
SET col = new_value;
Условна актуализация
За да направите условна актуализация в зависимост от това дали текущата стойност на колона съответства на условието, можете да добавите WHERE
клауза, която уточнява това. Базата данни първо ще намери редове, които съответстват на WHERE
клауза и след това извършва актуализации само на тези редове.
UPDATE table
SET col = new_value
WHERE col = old_value;
За да разширите това, можете да добавите каквото и да било към WHERE
клауза, която харесвате, стига да е валиден израз. Така че, за да извършите актуализация въз основа на стойността на друга колона в същата таблица, можете да изпълните следното:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;
Тъй като WHERE
клаузата може да съдържа всеки валиден израз, вие също така имате възможност да правите актуализации, където множество колони отговарят на критериите
UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;
UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;
Както можете да видите, можете да разширите WHERE
клауза толкова, колкото искате, за да филтрирате редовете за актуализиране до това, от което се нуждаете.
Сега какво се случва, ако искате да актуализирате редове в една таблица въз основа на състоянието на друга таблица? Този въпрос води до няколко различни начина, по които можете да направите това.
Тъй като WHERE
клаузата може да съдържа всеки валиден израз, можете да използвате подзаявка:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);
Можете също да използвате подзаявка в SET
част от израза, ако искате да зададете колоната на стойност в друга таблица
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
Може би по-лесен начин е да посочите няколко таблици след UPDATE
клауза. Само SET
Expression ще извърши актуализации, но изброяването на допълнителни таблици ще позволи таблиците да бъдат включени.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;
Подобно на разширяването на WHERE
клауза, количеството таблици може да бъде разширено, за да включи всички таблици, от които се нуждаете, ако имате няколко таблици, които трябва да бъдат обединени.