2016-03-20 10 views
1

Ich habe 2 Tabellen: Ich möchte meine Tabelle1 Datensätze mit dem geeigneten Alter, die in Tabelle2 gefunden werden kann aktualisieren. Eindeutige Kennung ist die BVD_ID_NUMBER. Ich habe versucht, dies mit dem folgenden Code zu tunVerwenden von inneren Join beim Aktualisieren in 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); 

ich folgende Fehlermeldung erhalten: SQL-Fehler: ORA-00904: "ORBIS_DISTINCT" "BVD_ID_NUMBER": ungültige Kennung 00904. 00000 - „% s:. Ungültig Kennung "

Irgendwelche Hilfe?

Antwort

1

Hmmm. Sie haben Ihre Anfrage zu kompliziert gemacht. Wenn korrelierte Unterabfragen verwendet werden, gibt es normalerweise keinen Grund, die äußere Tabelle in der inneren Unterabfrage zu erwähnen. Oracle erlaubt es nicht, für korrelierte Unterabfragen über eine Ebene Scoping, so müssen Sie für die Korrelationsklausel vereinfachen:

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

Dies ist wahrscheinlich eine „Unterabfrage gibt mehr als eine Zeile“ Art von Fehler zu verursachen. Um dies zu beheben, verwenden Sie die Aggregation oder 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

Ich glaube nicht, dass er an Umfang haben versucht, mehr als 1 Ebene nach unten, die er gerade tat nicht alias etwas .. – sagi

+0

@sagi. . . Ich habe die Antwort behoben. Du hast recht. Die Oracle-Fehlermeldung entsprach eindeutig nicht der Abfrage in der Frage, also ignorierte ich sie. –

+0

Funktioniert wie ein Charme, Fixierungsaliasse dit the job! – Louwinho

Verwandte Themen