অন্য সারণী থেকে ডেটা সহ কলাম আপডেট করুন


11

আমি জটিল সমস্যা নিয়ে কাজ করছি, তবে আমি এটিকে এ সমস্যার সহজতর করব।

আমার দুটি টেবিল আছে

A [ID, column1, column2, column3]
B [ID, column1, column2, column3, column4]

এবং আমি তৃতীয়টি আপডেট করতে চাই:

C [ID, column1, column2,column3] 

আমি এই কোয়েরিটি ব্যবহার করে অন্য একটি তৃতীয় সারণী আপডেট করছি।

UPDATE C 
  set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab 
  from (select A.column1 as firstTab, B.column2 as secTab, 
              (A.column1 + B.column2) thirdTab 
        from A, B limit 1; ) as t ; 

আমি পেয়েছি:

UPDATE 0

আমি যখন এই ক্যোয়ারী চালাচ্ছি:

select A.column1 as firstTab, B.column2 as secTab, (A.column1 + B.column2) thirdTab 
            from A, B limit 1; 

আমি ফলাফল পেয়েছি। আমি কিছু অনুপস্থিত করছি ?

নমুনা ডেটা: http://sqlfiddle.com/#!15/e4d08/5

উত্তর:


19

সঠিক ফর্মটি হবে (তথ্যের অভাবে বর্তমান pg সংস্করণ 9.3 ধরে ধরে):

UPDATE C 
SET    column1 = A.column1 
     , column2 = B.column2 
     , column3 = A.column1 + B.column2
FROM   A
JOIN   B ON A.id = B.id  -- ??? not specified in question!
WHERE  C.id = A.id      --  ??? not specified in question!
AND   (C.column1, C.column2, C.column3) IS DISTINCT FROM
      (A.column1, B.column2, A.column1 + B.column2);

WHEREখালি আপডেটগুলি এড়ানোর জন্য শেষ ধারাটি alচ্ছিক যা কোনও পরিবর্তন করবে না (তবে এখনও সম্পূর্ণ ব্যয়ে একটি নতুন সারি সংস্করণ লিখুন)।

ইয়ারকিউব ইতিমধ্যে তার মন্তব্যে একটি প্রাথমিক ব্যাখ্যা দিয়েছেন:

আপনি সদৃশ পাবেন না আপনার উত্সযুক্ত টেবিলটি ক্রস জয়েনিং Aএবং B(অর্থাত্ কোনও যোগদানের শর্ত ছাড়াই ) এবং তারপরে একটি স্বেচ্ছাসেবক সারিটি ( LIMIT 1বিনা ORDER BY) চয়ন করা। এটি সারণীর সমস্ত সারি আপডেট করার জন্য সেই স্বেচ্ছাচারী সারি থেকে মানগুলি ব্যবহার করে C। আপনি যদি সি এর বিভিন্ন সারির জন্য বিভিন্ন মান ব্যবহার করতে চান তবে আপনাকে 3 টি সারণিতে যোগ দিতে হবে (ব্যবহার করে JOIN - ONএবং WHERE)

বিস্তারিত জানার জন্য ম্যানুয়ালটি UPDATEদেখুন।


0

আপনাকে এরকম কিছু করতে হবে:

UPDATE C 
  set column1=t.firstTab, column2=t.secondTab, column3=t.thirdTab 
  from (select A.column1 as firstTab, B.column2 as secTab, 
              (A.column1 + B.column2) thirdTab 
        from A
        join B  on ...
        where ... ) as t
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.