Redshift обновление innerjoin - PullRequest
       10

Redshift обновление innerjoin

0 голосов
/ 23 октября 2019

Я хочу обновить newState

Этот выбор Работает:

select cd.referenceid,  cd.productstate , cd.date, dateadd(day,-1,cd.date) as gestern, cd2.date as cd2date, cd2.productstate, cd.statenew
from public.contractdaily  cd
left join public.contractdaily cd2 on cd2.contractid = cd.contractid and dateadd(day,-1,cd.date) = cd2.date
where cd.productstate != cd2.productstate and cd.referenceid = 201663

Это не работает

update contractdaily  set stateNew = 1
from
(select  cd.stateNew ,cd.referenceid,  cd.productstate as cd1productstate , cd.date, dateadd(day,-1,cd.date) as gestern, 
cd2.date as cd2date, cd2.productstate as cd2productstate, cd.referenceid as cdreferenceid
from contractdaily  cd
left join contractdaily cd2 on cd2.contractid = cd.contractid and dateadd(day,-1,cd.date) = cd2.date )foo
where contractdaily.productstate !=  foo.cd2productstate  and contractdaily.referenceid = 201663;

Ошибка: Amazon Недопустимая операция: таблица назначениядолжен быть частью предиката equijoin;[Состояние SQL = XX000, код ошибки БД = 500310]

1 Ответ

0 голосов
/ 27 октября 2019

Может быть, это поможет:

update contractdaily
set stateNew = 1
where referenceid = 201663
and productstate not in
(
select cd2.productstate 
from contractdaily cd
left join contractdaily cd2 on cd2.contractid = cd.contractid and dateadd(day,-1,cd.date) = cd2.date
);
...