Я немного борюсь с SQL-запросом. У нас есть некоторые адреса, у которых неправильные даты начала, но CREATE Dates верны.Обновление нескольких строк с разными значениями - инструкция THEN
Цель состоит в том, чтобы обновить около 4000 записей вместо того, чтобы идти один за другим. Я знаю, что я могу сделать это на основе Person_ID, но это будет очень трудоемким. Проблема заключается в том, что оператор Then, потому что мне нужно выбрать значение, которое находится в одной строке, поэтому, возможно, мне нужно сначала объявить значение, но я не уверен, как это уместиться?
update ADDRESS
set START_DATE = CASE
when STATUS = 'Inactive' and START_DATE = '1900-01-01'
then (select CREATE_DATE from ADDRESS where STATUS = 'Inactive' and START_DATE = '1900-01-01')
else END_DATE end
where STATUS = 'Inactive' and START_DATE = '1900-01-01' and PEOPLE_ID IN (select PEOPLE_ID from ADDRESS where START_DATE = '1900-01-01' and STATUS = 'Inactive')
Я понимаю, что некоторые строки имеют утверждения, которые могут быть излишними. PEOPLE_ID должен, вероятно, как-то соответствовать правилу выбора THEN Statement?
ли ваша цель просто обновить 'start_date' до' create_date' для неактивных записей с неправильной датой начала? – Quassnoi
@Quassnoi - Да. Существует идентичная фильтрация в трех разных местах, и попытка использования PEOPLE_ID в предложении WHERE не требуется. Просто найдите START_DATE = '1900-01-01' и STATUS = 'inactive', а затем выполните то, что у вас есть в вашем ответе. Даже если вы не хотите устанавливать START_DATE в END_DATE, если это правильно установленное значение. – Dresden
@Quassnoi да, это именно то, что я пытаюсь сделать! Запрос работает в моей тестовой БД. Спасибо! – Nestalna