অন্য টেবিল থেকে কীভাবে একটি টেবিল আপডেট করবেন


28

আমার একটি টেবিল এ এর ​​কলাম রয়েছে (আইডি, ফিল্ড_1, ফিল্ড_2), এবং অন্য টেবিলের বি কলাম রয়েছে (আইডি, ক্ষেত্র_2)

এখন আমি টেবিল বি কে A তে মার্জ করতে চাই, তার মানে আমি টেবিল A ​​এর মান টেবিল A ​​তে ফিল্ড 2 আপডেট করতে চাই So সুতরাং কীভাবে এটি প্রয়োগ করা যায়? বিটিডাব্লু আমি ওরাকল ব্যবহার করছি

ধন্যবাদ


উভয় সারণীতে কি একই সংখ্যক রেকর্ড রয়েছে?
উজ্জ্বলশ্রি

উত্তর:


29

সহ-সম্পর্কিত সাবকিউয়ের (কেরি দ্বারা প্রস্তাবিত) বিকল্প বিকল্প হ'ল মার্জ স্টেটমেন্টটি ব্যবহার করা হবে যা সাবলেটর চেয়ে আরও দক্ষ হতে পারে (যা কেবলমাত্র উভয় বিবৃতি কার্যকর করার পরিকল্পনাটি দেখে যাচাই করা যেতে পারে)।

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
ললিত কুমার বি

এটি আমার পক্ষে কাজ করেছে, 2.5 মিলিয়ন সারিতে বনাম আপডেট করেছে। সাব-কোয়েরির পদ্ধতিটি চেষ্টা করে যা ORA-01555: snapshot too old
ভুলের

15

আপনি এটির পরে কী করছেন তা ঠিক নিশ্চিত নয় , তবে এটি নির্ধারিত কাজের মাধ্যমে ওয়ান-অফ হিসাবে বা অবিচ্ছিন্ন হিসাবে কাজ করা উচিত:

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

এখন, প্রতিবার উপরেরটি কার্যকর করা হলে, এটি টেবিলের সমস্ত সারি জুড়ে এটি করবে। আপনার যদি সর্বদা এটি করার দরকার হয় তবে আমি অন্য কিছু প্রস্তাব করব, তবে এক-অফ বা খুব ছোট টেবিলের জন্য এটি পর্যাপ্ত হওয়া উচিত।


2

আমি ব্যবহারকারী 1 এর অন্য টেবিল থেকে 1 ব্যবহারকারীর 1 টেবিলটি সফলভাবে এটি করেছি:

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

আপনি টেবিলবিতে একটি ট্রিগার তৈরি করতে পারেন যা টেবিলবিতে প্রতিবার ফিল্ড 3 আপডেট করে টেবিলএ আপডেট হয়। ট্রিগারগুলি তৈরি করার বিষয়ে আরও তথ্যের জন্য এখানে দেখুন - http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ


প্রাসঙ্গিক উত্তর নয়
ক্লিনবোল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.