टेबल को दूसरी टेबल से कैसे अपडेट करें


28

मेरे पास एक टेबल A में कॉलम (आईडी, फ़ील्ड_1, फ़ील्ड_2) है, और दूसरी टेबल बी में कॉलम (आईडी, फ़ील्ड_2) है

अब मैं तालिका बी को ए में विलय करना चाहता हूं, इसका मतलब है कि मैं तालिका बी के मूल्य में तालिका ए में फ़ील्ड 2 को अपडेट करना चाहता हूं। इसलिए इसे कैसे लागू किया जाए? BTW मैं ओरेकल का उपयोग कर रहा हूं

धन्यवाद


क्या दोनों तालिकाओं में समान संख्या में रिकॉर्ड हैं?
उज्जवलश्री

जवाबों:


29

सह-संबंधित उपश्रेणी (केरी द्वारा सुझाया गया) के लिए एक वैकल्पिक दृष्टिकोण MERGE कथन का उपयोग करना होगा, जो सबसेले से अधिक कुशल हो सकता है (जिसे केवल दोनों कथनों की निष्पादन योजना को देखकर सत्यापित किया जा सकता है)।

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2

2
MERGEकथन का एकमात्र प्रतिबंध यह है कि आप उस कॉलम को अपडेट नहीं कर सकते हैं जिस पर वह शामिल है, अर्थात आप ONक्लॉज में उपयोग किए गए कॉलम को अपडेट नहीं कर सकते ।
ललित कुमार B

इसने मेरे लिए काम किया, 2.5 मिलियन पंक्तियों को अद्यतन किया। सब-क्वेरी विधि का प्रयास किया, जो शायद 45 मिनट तक चलने से पहले चला गया थाORA-01555: snapshot too old
helmy

15

निश्चित रूप से निश्चित नहीं है कि आप इस पर क्या कर रहे हैं, लेकिन यह एक काम के रूप में, या एक निर्धारित कार्य के माध्यम से निरंतर होना चाहिए:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

अब, हर बार उपरोक्त निष्पादित होने पर, यह तालिका में सभी पंक्तियों में करेगा। यदि यह कुछ ऐसा है जो आपको हर समय करने की आवश्यकता है, तो मैं कुछ और सुझाव दूंगा, लेकिन एक-बंद या बहुत छोटी तालिकाओं के लिए यह पर्याप्त होना चाहिए।


2

मैंने यह सफलतापूर्वक user1 में एक तालिका से user1 में एक तालिका का उपयोग करके किया है:

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>

1

आप टेबलबी पर एक ट्रिगर बना सकते हैं जो टेबलबी पर हर बार टेबल 2 को अपडेट करता है। ट्रिगर बनाने के बारे में अधिक जानकारी के लिए यहां देखें - http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ


प्रासंगिक उत्तर नहीं
CleanBold
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.