Temel olarak tempptnaddress tablonuz, ptnid değerlerinin en azından bir kısmı için birden fazla satıra sahiptir ve Oracle, bu satırlardan hangisini sizin için güncelleştirmeyi yapmak için kullanacağını seçmeyecektir. :) Mesela
, ben varsa tablo1 gibi bir şey kullanarak
COL1 COL2 COL3
1 ONE ENG
1 UNO SPA
2 TWO ENG
3 THREE ENG
4 FOUR ENG
4 CUATRO SPA
ve tablo2
COL1 COL2
1
2
3
4
olarak ve denemek ve güncelleme TABLE2.COL2 olarak:
UPDATE table2 t2
SET col2 = (SELECT col2 FROM table1 t1 WHERE t1.col1 = t2.col1)
neyi TABLE1.COL2 sütunundaki değer 1 ve 4 için kullanılmalı mı? Oracle bizim için tahmin etmeyecek ve ORA-01427'yi aldığınızda.
UPDATE table2 t2
SET col2 = (SELECT col2 FROM table1 t1 WHERE t1.col1 = t2.col2 AND ROWNUM = 1)
ama muhtemelen gibi bazı uygun mantık koymak istiyorum:
sadece birini seçmek gibi bu kadar kolay olabilir keyfi gibi Senin durumunda
UPDATE table2 t2
SET col2 = (SELECT t1.col2 FROM table1 t1 WHERE t1.col1 = t2.col1 AND t1.col3 = 'ENG')
yapmanız gerekenler güncellemenizdeki alt sorgu, yalnızca ptnid başına bir satır döndürecek şekilde olsun.
Bu çalıştırırsanız:
SELECT ptnid, COUNT(*)
FROM tempptnaddress
GROUP BY ptnid
HAVING COUNT(*) > 1
o size gösterecektir neyi tempptnaddress birden fazla satır var ptnids. Hile, ptnid başına birden fazla satırın neden olduğunu ve güncelleme için doğru olanı nasıl seçeceğinizi bulmak olacaktır.