gpt4 book ai didi

sql - Oracle SQL - 如何从外部连接表进行更新?

转载 作者:行者123 更新时间:2023-12-02 21:43:20 28 4
gpt4 key购买 nike

问题

我需要编写一个更新查询,其中我的 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 语句以将 null 值设置为默认值)。为此,我需要将 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。

最佳答案

如果我理解正确的话,如果 dw_sls_rep_conv 表中没有匹配项,您想将值设置为 NULL 吗?如果是这样,只需删除 EXISTS 条件,所有行都会更新:

UPDATE SalesExt_tmp tmp
SET slsrep = (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
WHERE tmp.sysind = 'AIM';

如果 dw_sls_rep_conv 表中存在匹配项,则 slsrep 列将使用所选值进行更新,否则将使用 NULL 进行更新。

关于sql - Oracle SQL - 如何从外部连接表进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985101/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com