Grundsätzlich hat Ihre Tempptnadadustabelle mehr als eine Zeile für mindestens einige der ptnid -Werte und Oracle wird nicht auswählen, welche dieser Zeilen verwendet wird, um das Update für Sie durchzuführen. :)
Zum Beispiel, wenn ich tabelle1 haben als
COL1 COL2 COL3
1 ONE ENG
1 UNO SPA
2 TWO ENG
3 THREE ENG
4 FOUR ENG
4 CUATRO SPA
und table2 als
COL1 COL2
1
2
3
4
und versuchen und zu aktualisieren TABLE2.COL2 mit so etwas wie:
UPDATE table2 t2
SET col2 = (SELECT col2 FROM table1 t1 WHERE t1.col1 = t2.col1)
was Wert in Spalte TABLE1.COL2 sollte es für 1 und 4 verwenden? Oracle wird nicht für uns raten und das ist, wenn Sie die ORA-01427 bekommen.
Es könnte so einfach sein wie nur ein willkürlich Kommissionierung mag:
UPDATE table2 t2
SET col2 = (SELECT col2 FROM table1 t1 WHERE t1.col1 = t2.col2 AND ROWNUM = 1)
aber Sie wollen wahrscheinlich in einigen richtige Logik setzen dort wie:
UPDATE table2 t2
SET col2 = (SELECT t1.col2 FROM table1 t1 WHERE t1.col1 = t2.col1 AND t1.col3 = 'ENG')
In Ihrem Fall müssen Sie Holen Sie es so, dass die Unterabfrage in Ihrem Update nur eine Zeile pro Ptnid zurückgibt.
Wenn Sie führen dies:
SELECT ptnid, COUNT(*)
FROM tempptnaddress
GROUP BY ptnid
HAVING COUNT(*) > 1
es Sie, was ptnids zeigen, dass mehr als eine Zeile in tempptnaddress haben. Der Trick wird sein, herauszufinden, warum es mehr als eine Reihe pro ptnid gibt und wie man die richtige für das Update auswählt.