【问题标题】:Using inner join when updating in Oracle在 Oracle 中更新时使用内连接
【发布时间】:2016-03-21 01:04:08
【问题描述】:

我有 2 张桌子: 我想用合适的年龄更新我的 table1 记录,可以在 table2 中找到。唯一标识符是 BVD_ID_NUMBER。我尝试使用以下代码来做到这一点

UPDATE table1
  SET table1.age = 
  (select table2.age2
    from 
      (select distinct table2.BVD_ID_NUMBER, table2.age2
        FROM table1
       inner JOIN table2
        on table1.ACQUIROR_BVD_ID_NUMBER=table2.BVD_ID_NUMBER)
   where table2.BVD_ID_NUMBER=table1.ACQUIROR_BVD_ID_NUMBER);

我收到以下错误: SQL 错误:ORA-00904:“ORBIS_DISTINCT”。“BVD_ID_NUMBER”:标识符无效 00904. 00000 - "%s: 无效标识符"

有什么帮助吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    嗯。您的查询过于复杂。通常,在使用相关子查询时,没有理由在内部子查询中提及外部表。 Oracle 不允许关联子查询的范围超出一级,因此您需要对关联子句进行简化:

    UPDATE table1 t1
        SET age = (select t2.age2
                   from table2 t2
                   where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER
                  );
    

    这很可能导致“子查询返回多行”类型的错误。要解决这个问题,请使用聚合或rownum = 1

    UPDATE table1 t1
        SET age = (select t2.age2
                   from table2 t2
                   where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER and
                         rownum = 1
                  );
    

    【讨论】:

    • 我不认为他试图将范围缩小到 1 级以上,他只是没有给任何东西起别名..
    • @sagi 。 . .我确定了答案。你说的对。 Oracle 错误消息显然与问题中的查询不对应,所以我宁愿忽略它。
    • 工作就像一个魅力,修复同盟国的工作!
    猜你喜欢
    • 2022-12-10
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多