【问题标题】:Modify Update with Inner Join to avoid error使用内连接修改更新以避免错误
【发布时间】:2014-05-22 15:42:45
【问题描述】:

我正在尝试使用以下语句创建父/子关系:

    UPDATE (SELECT F2.FOLDERRSN NEW, F1.PARENTRSN OLD 
      FROM AMANDA.FOLDER F1
      INNER JOIN AMANDA.FOLDER F2 ON F1.PARENTRSN = F2.CONVERSIONRSN
      WHERE F1.FOLDERRSN BETWEEN 213010 AND 217773
      AND F2.FOLDERTYPE = 'ESC') T
    SET T.OLD = T.NEW

select 语句有效并显示了我期望的两个值,但与更新一起我收到以下错误:

SQL 错误:ORA-01779:无法修改映射到非键保留表的列

谁能帮我用另一种方法来完成这个?

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    试试:

    UPDATE AMANDA.FOLDER F1
    SET F1.PARENTRSN = (
       SELECT F2.FOLDERRSN
       FROM AMANDA.FOLDER F2
       WHERE F1.PARENTRSN = F2.CONVERSIONRSN
         AND F2.FOLDERTYPE = 'ESC'
    )
    WHERE F1.FOLDERRSN BETWEEN 213010 AND 217773
    

    但上面的查询很可能会抛出错误:
    ORA-01427: single-row subquery returns more than one row,
    因为与您的查询给出 ORA-01779 的原因相同

    【讨论】:

    • 成功了!编译时没有报错!感谢您的帮助!
    猜你喜欢
    • 2017-11-09
    • 2011-09-12
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2020-11-27
    • 2012-05-23
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多