क्या कोई यह सत्यापित कर सकता है कि पीएल एसक्यूएल में अपडेट स्टेटमेंट के साथ आंतरिक जुड़ना वैध है या नहीं? जैसे
Update table t
set t.value="value"
from tableb b inner join
on t.id=b.id
inner join tablec c on
c.id=b.id
inner join tabled d on
d.id=c.id
where d.key=1
उत्तर:
उत्तर № 1 के लिए 15यह synthax ओरेकल एसक्यूएल में काम नहीं जीता।
ओरेकल में आप कभी-कभी जुड़ सकते हैं यदि टेबल "कुंजी-संरक्षित" हैं, यानी:
UPDATE (SELECT a.val_a, b.val_b
FROM table a
JOIN table b ON a.b_pk = b.b_pk)
SET val_a = val_b
ऐसा मानते हुए b_pk
की प्राथमिक कुंजी है b
, यहां शामिल होने योग्य है क्योंकि ए की प्रत्येक पंक्ति के लिए है ज्यादा से ज्यादा बी से एक पंक्ति, इसलिए अद्यतन निर्धारक है।
आपके मामले में क्योंकि अद्यतन मान किसी अन्य तालिका पर निर्भर नहीं है, आप एक मौजूदा स्थिति के साथ एक साधारण अद्यतन का उपयोग कर सकते हैं, ऐसा कुछ:
UPDATE mytable t
SET t.VALUE = "value"
WHERE EXISTS
(SELECT NULL
FROM tableb b
INNER JOIN tablec c ON c.id = b.id
INNER JOIN tabled d ON d.id = c.id
WHERE t.id = b.id
AND d.key = 1)
उत्तर № 2 के लिए 1
update t T
set T.value = "value"
where T.id in (select id from t T2, b B, c C, d D
where T2.id=B.id and B.id=C.id and C.id=D.id and D.key=1)
-- t is the table name, T is the variable used to reffer to this table