问题
我需要编写一个更新查询,其中我的 SET 引用了一个外部连接表。
我可以使用 SQL Server 相当容易地做到这一点,但是我花了很长时间弄清楚 Oracle 中的语法,因为我只允许在更新查询中使用一个表。
我编写了以下 Oracle 查询:
UPDATE SalesExt_tmp tmp
SET slsrep = (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
WHERE EXISTS (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
AND tmp.sysind = 'AIM';
这会处理交集,但我需要处理 SalesExt_tmp 中在 dw_sls_rep_conv 中没有等效匹配的值(我计划添加一个 case 语句以将空值设置为默认值)。为此,我需要将 dw_sls_rep_conv 设置为外部连接表。但这就是我卡住的地方。
SQL Server 示例
在 SQL Server 中,解决方案是小菜一碟,因为您可以在更新查询中拥有多个表:
UPDATE SalesExt_tmp tmp
LEFT JOIN dw_sls_rep_conv sls ON sls.aims_rep = tmp.slsrep
SET tmp.slsrep = sls.three_dig_rep
WHERE tmp.sysind = 'AIM';
但我一生都无法弄清楚如何在 Oracle 中做到这一点。我了解此查询将允许我的 slsrep 字段在某些情况下设置为 NULL,这使我担心可能不允许此操作。
问题
1)首先这在Oracle中是否可行?(应该是吧?)
2)我需要如何重组我的查询来完成这个?我猜我的 WHERE EXISTS 子句需要去......但我仍然不知道在哪里放置我的 JOIN。