我正在努力争取一点SQL查询。我们有一些地址的START日期错误,但CREATE日期正确。使用不同的值更新多行 - 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声明的Select Statement权利?
是你的目标只是为启动日期错误的非活动记录更新'start_date'到'create_date'? – Quassnoi
@Quassnoi - 是的。在3个不同的地方发生相同的过滤,并且不需要在WHERE子句中尝试使用PEOPLE_ID。只需查找START_DATE ='1900-01-01'和STATUS ='非活动',然后执行您的答案。即使有其他,如果它是正确设置的值,您也不希望将START_DATE设置为END_DATE。 – Dresden
@Quassnoi是的,这正是我想要做的!查询在我的测试数据库中工作。非常感谢! – Nestalna