Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle中更新时使用内部联接_Sql_Oracle - Fatal编程技术网

Sql 在Oracle中更新时使用内部联接

Sql 在Oracle中更新时使用内部联接,sql,oracle,Sql,Oracle,我有两张桌子: 我想用合适的年龄更新我的表1记录,可以在表2中找到。唯一标识符是BVD_ID_编号。我尝试使用以下代码来实现这一点 UPDATE table1 SET table1.age = (select table2.age2 from (select distinct table2.BVD_ID_NUMBER, table2.age2 FROM table1 inner JOIN table2 on table

我有两张桌子: 我想用合适的年龄更新我的表1记录,可以在表2中找到。唯一标识符是BVD_ID_编号。我尝试使用以下代码来实现这一点

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_编号”:无效标识符 90400000-%s:无效标识符


有什么帮助吗?

Hmmm。您的查询过于复杂了。通常,在使用相关子查询时,没有理由在内部子查询中提及外部表。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错误消息显然与问题中的查询不符,因此我忽略了它。它就像一个符咒,可以修复作业!