gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:44:56 25 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 语句以将空值设置为默认值)。为此,我需要将 dw_sls_rep_conv 设置为外部连接表。但这就是我卡住的地方。

SQL 服务器示例

在 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/

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