Oracle 从内部联接查询更新集时出错

Oracle 从内部联接查询更新集时出错,oracle,Oracle,我想运行如下查询: UPDATE I SET I.CAP_NAME = S.CAP_NAME FROM INSURED_FARMERS I INNER JOIN INDIAN_STATES_REGION S ON UPPER(I.STATE_NAME_FI) = UPPER(S.STATE_NAME) 但它抛出一个错误:sql错误ora-00933 sql命令未在第行正确结束: SET I.CAP_NAME=S.CAP_NAME我认为您无法使用联接在Oracle中编写UP

我想运行如下查询:

UPDATE   I
SET I.CAP_NAME =  S.CAP_NAME 
FROM INSURED_FARMERS  I 
INNER JOIN INDIAN_STATES_REGION  S 
   ON UPPER(I.STATE_NAME_FI) = UPPER(S.STATE_NAME)
但它抛出一个错误:sql错误ora-00933 sql命令未在第行正确结束:
SET I.CAP_NAME=S.CAP_NAME

我认为您无法使用联接在Oracle中编写UPDATE语句

UPDATE INSURED_FARMERS I
SET I.CAP_NAME = ( SELECT S.CAP_NAME 
                   FROM INDIAN_STATES_REGION  S 
                   WHERE UPPER(I.STATE_NAME_FI) = UPPER(S.STATE_NAME) )
WHERE EXISTS ( SELECT S.CAP_NAME 
               FROM INDIAN_STATES_REGION  S 
               WHERE UPPER(I.STATE_NAME_FI ) = UPPER(S.STATE_NAME) )
请看这里:

您可以采用两种方式:

  • 就像有一个答案存在一样
  • 如果表由具有唯一索引或主键的列连接(这些列
    UPPER(I.STATE\u NAME\u FI)=UPPER(S.STATE\u NAME)
    ),则使用内联视图

  • 因为你跑得更快……我们向路人指出,有两种方法可以做到这一点。i、 e.删除
    EXISTS
    将导致为所有不匹配的记录设置
    NULL