gpt4 book ai didi

sql - Oracle SQL 根据匹配 ID 更新表

转载 作者:行者123 更新时间:2023-12-04 16:15:26 25 4
gpt4 key购买 nike

我正在尝试根据 MASTER_CUSTOMERGPID 字段更新表 DIM_TRADING_ACCOUNTSGPID 字段,其中MASTER_CUSTOMER 中的 MCUST_CODE 等于 DIM_TRADING_ACCOUNTSTRADING_CODE 无论我尝试什么,我基本上都能得到每次都相当于一个语法错误。

我一直在接受 this question 的指导.到目前为止我所做的四次尝试以及错误如下。有人可以帮我获得适用于 oracle SQL 的正确语法吗?

注意:我在 mcust_code 上使用了 upper,因为 trading_code 字段全部大写

尝试 1 (错误是:SQL 命令未正确结束)

UPDATE dim_trading_accounts dta
SET dta.gpid = mc.gpid
FROM master_customer mc
WHERE UPPER(mc.mcust_code) = dta.trading_code;

尝试 2 (错误是:缺少“SET”关键字)

UPDATE 
dim_trading_accounts dta, master_customer mc
SET
dta.gpid = mc.gpid
WHERE
upper(mc.mcust_code) = dta.trading_code;

尝试 3 (这一次返回错误:单行子查询返回多行)

UPDATE dim_trading_accounts dta
SET dta.gpid = (SELECT mc.gpid
FROM master_customer mc
WHERE dta.trading_code = upper(mc.mcust_code))
WHERE EXISTS (SELECT 1
FROM master_customer mc
WHERE dta.trading_code = upper(mc.mcust_code));

尝试 4 (错误是:缺少“ON”关键字)

MERGE INTO dim_trading_accounts
USING master_customer
ON dim_trading_accounts.trading_code = upper(master_customer.mcust_code)
WHEN MATCHED THEN
UPDATE
SET dim_trading_accounts.gpid = master_customer.gpid;

最佳答案

你应该使用 maxmin在子查询中避免single-row subquery returns more than one row错误。

UPDATE 
dim_trading_accounts dta
SET
dta.gpid = (SELECT MAX(gpid)
FROM master_customer
WHERE upper(mcust_code) = dta.trading_code);

要查看出现错误的原因,请使用 select并检查 gpid 的结果和 tradingcode组合。

 SELECT mc.gpid, dta.trading_code
FROM master_customer mc
JOIN dim_trading_accounts dta ON upper(mc.mcust_code) = dta.trading_code

如果您看到 select 中的重复行以上,你可以确定使用maxminupdate .

关于sql - Oracle SQL 根据匹配 ID 更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399960/

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