2016-03-20 17 views
1

私は2つのテーブルを持っています: テーブル2にある適切な年齢でテーブル1のレコードを更新したいと思います。一意の識別子はBVD_ID_NUMBERです。 。無効: - SQLエラー:ORA-00904: "ORBIS_DISTINCT" "BVD_ID_NUMBER"「%sの無効な識別子 00904. 00000私は、次のコードOracleでの更新時に内部結合を使用する

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); 

を使用してこれを実行しようとした私は、次のエラーを受け取りました識別子 "

助けてください?

答えて

1

Hmmm。あなたはあなたの質問を複雑にしました。通常、相関サブクエリを使用する場合、内部サブクエリに外部テーブルを記述する理由はありません。 Oracleは、相関サブクエリのための1つのレベルを超えてスコープを許可していないので、あなたは、相関句のために簡素化する必要があります。これは、エラーの種類「サブクエリが複数行を返す」が発生する可能性がある

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 
      ); 
+0

は、私は彼がちょうどエイリアス何も... – sagi

+0

@sagiなかった、彼はもっとして1つのレベルダウン範囲にしようとしたとは思いません。 。 。私は答えを修正しました。あなたが正しいです。オラクルのエラーメッセージは明らかに質問の質問に対応していないので、私はむしろそれを無視しました。 –

+0

魅力のように動作し、仕事をしてalliassesを修正! – Louwinho

関連する問題