2012-02-23 17 views
8

में आंतरिक शामिल होने के साथ कैसे अपडेट करें कोई व्यक्ति कृपया यह सत्यापित कर सकता है कि आंतरिक शामिल पीएल एसक्यूएल में अद्यतन स्टेटमेंट के साथ मान्य है या नहीं? उदा।ओरेकल

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 

उत्तर

15

यह सिंथैक्स ओरेकल एसक्यूएल में काम नहीं करेगा।

ओरेकल में आप कभी कभी एक में शामिल होने अगर टेबल "कुंजी से संरक्षित" कर रहे हैं अद्यतन कर सकते हैं, यानी:

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_pkb की प्राथमिक कुंजी है, यहाँ में शामिल होने कि वजह से प्रत्येक पंक्ति के लिए अपडेट किए ए पर बी से एक पंक्ति है, इसलिए अद्यतन निर्धारक है।

अद्यतन मूल्य के बाद से आपके मामले में एक और मेज पर कुछ इस तरह निर्भर नहीं करता है कि आप एक अस्तित्व शर्त के साथ एक सरल अद्यतन इस्तेमाल कर सकते हैं,:

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) 
0
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 
+1

आप अपने जवाब का विस्तार कर सकते हैं एक में शामिल करने के आपके कोड का स्पष्टीकरण? यह पाठक को आपके विचार से ज्यादा मदद करता है। 1000 से अधिक रिकॉर्ड होने पर – gunr2171

+1

'इन' कीवर्ड काम नहीं करेगा। तो यह जवाब अमान्य है। –