【发布时间】:2026-01-28 15:55:02
【问题描述】:
我正在尝试将具有嵌套 IF 语句的 talend 代码翻译成 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中对应的case语句:
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 映射器逻辑转换为 SQL?如果没有,你能告诉我什么是错的。
我应该为每个表包括“何时存在”吗?
我认为左连接应该隐式处理它。
【问题讨论】:
-
我注意到“b.delivery_fk is not null”之类的语句不在您的逻辑中。您是否发布了所有逻辑?
标签: sql sql-server