我试图根据GPID
的DIM_TRADING_ACCOUNTS
字段更新表GPID
的MASTER_CUSTOMER
字段,其中MCUST_CODE
中的MASTER_CUSTOMER
等于TRADING_CODE
的DIM_TRADING_ACCOUNTS
,无论如何我尝试一下,每次都会得到基本上等于语法错误的信息。
我一直在接受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;
最佳答案
您应该在子查询中使用max
或min
以避免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
中看到重复的行,则可以确保在max
中使用min
或update
。