आप इसे एक सहसंबद्ध सबक्वेरी के साथ करने में सक्षम होना चाहिए
UPDATE tbl1 t1
SET t1.b = (SELECT c
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
WHERE t1.a = 'foo'
AND EXISTS( SELECT 1
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
UPDATE
के साथ समस्या जो आपने लिखा है वह यह है कि Oracle गारंटी नहीं दे सकता कि ठीक 1 tbl2.c
. है मान जो एकल tbl1.b
. से मेल खाता हो मूल्य। अगर tbl2
. में एक से अधिक पंक्तियाँ हैं tbl1
. में किसी विशेष पंक्ति के लिए , सहसंबद्ध अद्यतन यह दर्शाता है कि एक एकल-पंक्ति सबक्वेरी ने कई पंक्तियों को लौटाया है, एक त्रुटि फेंकने वाला है। उस स्थिति में, आपको tbl2
से कौन सी पंक्ति निर्दिष्ट करने के लिए सबक्वेरी में कुछ तर्क जोड़ने होंगे उस मामले में उपयोग करने के लिए।