Я пытаюсь перевести код календаря, который имеет вложенный оператор IF, в SQL
Я думал, что перевел его правильно, но записи не обновляются, так как условие соединения не выполняется. Я добавил заявление случая верхнего уровня, чтобы проверить наличие записей, но хотел дважды проверить у экспертов здесь, если мой перевод вообще верен.
Логика от Talend Mapper:
IF row32.DISPLAY_NAME_REPORTED IS NULL THEN
IF row31.REPORTED_DISPLAY_NAME IS NULL THEN
IF row87.SPEC_TYPE1 IS NULL THEN
IF row87.SPEC_TYPE2 IS null THEN
row34.Series
ELSE
row34.Series + row34.Type2
END
ELSE
row34.Series + row34.Type2
END
ELSE
row31.REPORTED_DISPLAY_NAME
END
ELSE
row32.DISPLAY_NAME_REPORTED
END
Соответствующий регистр в SQL:
update a
set a.seriesbt = case when exists (select 1 from row32 x where
x.delivery_fk = a.delivery_fk) then
case when b.delivery_fk is not null and
b.DISPLAY_NAME_REPORTED is null then
case when c.reported_display_name is null then
case when d.SPEC_TYPE1 is null then
case when d.SPEC_TYPE2 is null then
a.series
else
a.series+a.SPEC_TYPE2 end
else a.series + a.SPEC_TYPE1 end
else c.reported_display_name end
else b.DISPLAY_NAME_REPORTED end
else a.series end
from tmpSales a
left join row32 b on b.delivery_fk = a.delivery_fk
left join row31 c on c.DELIVERY_FK = a.delivery_fk
left join row87 d on d.DELIVERY_FK = a.delivery_fk
Вопрос: правильно ли я перевел логику talend mapper в SQL? Если нет, подскажите, пожалуйста, в чем дело.
Должен ли я включить «когда существует» для каждой таблицы?
Я думал, что левое соединение должно неявно обрабатывать это.