【问题标题】:update set from inner join query thowing error [duplicate]来自内部连接查询的更新集抛出错误 [重复]
【发布时间】:2014-01-24 19:10:05
【问题描述】:

我想运行如下查询:

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 error ora-00933 sql command not properly end on line: SET I.CAP_NAME = S.CAP_NAME

【问题讨论】:

    标签: oracle


    【解决方案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) )
    

    【讨论】:

    • 既然你更快...sqlfiddle.com/#!4/60d85/1
    • 很好地指出@Passerby,有两种方法可以解决这个问题。即删除EXISTS 将导致为所有没有匹配的记录设置NULL
    【解决方案2】:

    请看这里:stackoverflow

    两种方法都可以:

    1. 就像存在的答案一样
    2. 如果您的表由具有唯一索引或主键的列(这些列UPPER(I.STATE_NAME_FI) = UPPER(S.STATE_NAME))连接,则使用内联视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2019-05-20
      相关资源
      最近更新 更多