2014-01-07 25 views
0

我想运行就像一个查询:更新从内设置联接查询异常触发错误

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

回答

1

我不认为您可以使用JOIN在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)) 
+1

Sinc e你更快... http://sqlfiddle.com/#!4/60d85/1 – Passerby

+0

有人指出@Passerby有两种方法来解决这个问题。即删除'EXISTS'会导致为所有没有匹配的记录设置NULL。 – Drumbeg

1

在这里看到:stackoverflow

你可以做两种方式:

  1. 像有一个答案,使用内嵌视图,如果你的表是用独特的列连接存在
  2. 索引或主键(这些列UPPER(I.STATE_NAME_FI) = UPPER(S.STATE_NAME)