Использование СЛУЧАЯ, КОГДА Необходимо Обновить

#sql #oracle #sql-update #case

#sql #Oracle #sql-обновление #дело

Вопрос:

У меня есть несколько столов, которые выглядят так

 select * from stipend order by subjectid, stipdate;  SUBJECTID STIPDATE AMOUNT ---------- ----------- ---------- 10011 31-oct-2021 800 10111 31-jul-2019 2000 10111 31-jul-2021 1500 20022 31-jul-2020 1200 30033 29-feb-2020 1400 40044. 31-jul-2020 1200 40044 31-jul-2021 2000 50055 31-jul-2021 2000 50055 30-sep-2021 1000   select * from subject order by subjectid;   SUBJECTID LNAME FNAME PROJID ---------- ------------ --------------------  10011 Indy Eva XYZ01  10111 Isner Monica XYZ04  11011 Dupont Marty XYZ05  20022 Jordan Sam XYZ01  30033 Jordan Mary XYZ01  40044 Belmont Renee XYZ02  50055 Pissaro Becky XYZ02  60066 Nadal Becky XYZ03  70077 Bardot Brigitte XYZ03  80088 null Eva XYZ03  90099 Garnet Larry XYZ04  

И я хочу обновить стипендии, которые есть в проектах XYZ01 и XYZ02, на 40%, используя СЛУЧАЙ, КОГДА построят. Очевидно, что две таблицы связаны по stipend.subjectid = subject.subjectid, и я бы использовал subject.projectid для определения этого, но как бы я сделал это в СЛУЧАЕ, КОГДА?

Вот как я делал это раньше

 update stipend  set amount = amount   (amount * .40)  where subjectid in  (select subjectid from subject  where subject.projid = 'XYZ01' or subject.projid = 'XYZ02');  

и это сработало, но теперь мне нужно сделать то же самое, но в СЛУЧАЕ, КОГДА.

Комментарии:

1. Почему вы хотите использовать case выражение? Ваш текущий код, похоже, работает, и a case , похоже, здесь не подходит.

Ответ №1:

Эдди, ниже приведено решение, в котором используется оператор CASE WHEN. Но, как отметил Мурейник в комментариях, ваше решение лучше, чем использование оператора CASE WHEN в этом случае.

 -- using CASE WHEN update s set s.amount = (case when x.projid in ('XYZ01','XYZ02')  then s.amount   (s.amount * .40)   else s.amount   end) from stipend s join subject x on x.subjectid = s.subjectid  

Примечание: Я не добавил x.projid в (‘XYZ01′,’XYZ02’) в предложение where, так как это противоречило бы цели использования СЛУЧАЯ, КОГДА. Таким образом, это будет выполняться для всех строк.