我试图根据GPIDDIM_TRADING_ACCOUNTS字段更新表GPIDMASTER_CUSTOMER字段,其中MCUST_CODE中的MASTER_CUSTOMER等于TRADING_CODEDIM_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;

最佳答案

您应该在子查询中使用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并检查gpidtradingcode组合的结果。

 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中使用minupdate

09-27 00:40