powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как одним update обновить записи по разным условиям?
8 сообщений из 8, страница 1 из 1
Как одним update обновить записи по разным условиям?
    #39344216
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, нужно увеличить salary на 100 для тех сотрудников, которые находятся в Seattle, а на 200 - для тех, кто в Oxford. По отдельности эти запросы легко сформировать, а как быть в рамках ОДНОГО update?
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344222
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ricardo_а как быть в рамках ОДНОГО update?Пообещать поднять зарплату тому, кто знает sql-выражения.
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344228
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,Понял, учтено. Ещё варианты какие?
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344230
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ricardo_,
Код: plsql
1.
2.
3.
UPDATE MY_TABLE
SET SALARY = CASE WHEN CITY = 'Sealte' THEN 100 WHEN CITY = 'Oxford' THEN 200 ELSE SALARY END
 WHERE CITY IN ('Sealte' , 'Oxford' ) 
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344239
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня такое решение:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
update employees e1
set salary = (case when 'Seattle'=(select l.city
                                     from employees e, departments d, locations l
                                    where e.employee_id = e1.employee_id 
                                      and e.department_id = d.department_id
                                      and d.location_id = l.location_id) 
                   then salary+100
                   when 'Oxford'=(select l.city
                                    from employees e, departments d, locations l
                                   where e.employee_id = e1.employee_id 
                                     and e.department_id = d.department_id
                                     and d.location_id = l.location_id) 
                   then salary+200
               end)    
where employee_id IN (select employee_id
                        from employees e, departments d, locations l
                       where e.department_id = d.department_id
                         and d.location_id = l.location_id
                         and l.city IN ('Seattle','Oxford'));

Но что мне не нравится то, что 3 раза приходится делать одну и ту же операцию соединения таблиц, это нормально или есть другой вариант?
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344241
_ricardo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XMLer_ricardo_,
Код: plsql
1.
2.
3.
UPDATE MY_TABLE
SET SALARY = CASE WHEN CITY = 'Sealte' THEN 100 WHEN CITY = 'Oxford' THEN 200 ELSE SALARY END
 WHERE CITY IN ('Sealte' , 'Oxford' ) 

Ок!
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344319
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
update (select salary, case city when 'Seatle' then 100 when 'Oxford' then 200 end as new_salary from t)
  set salary = new_salary
  where new_salary is null;
...
Рейтинг: 0 / 0
Как одним update обновить записи по разным условиям?
    #39344320
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
where new_salary is not null;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как одним update обновить записи по разным условиям?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]