পোস্টগ্রেএসকিউএল-এ সাব-কোয়েরি থেকে আপডেট বা সন্নিবেশ (একাধিক সারি এবং কলাম)


106

পোস্টগ্রিসে আমি এরকম কিছু করার চেষ্টা করছি:

  • UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);

  • INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)

তবে দস্তাবেজ হিসাবে উল্লিখিত পোস্ট পর্বগুলি 9.0 সহ 1 পয়েন্টটিও সম্ভব নয় ( http://www.postgresql.org/docs/9.0/static/sql-update.html )

2 পয়েন্টটি কাজ করছে না বলে মনে হচ্ছে। আমি নিম্নলিখিত ত্রুটি পেয়েছি: সাবকিউরিতে অবশ্যই একটি কলামই ফিরতে হবে।

আশা করি কারও জন্য আমার একদম কাজ আছে ar অন্যথায় অনুসন্ধানগুলি খুব বেশি সময় নিবে :(।

এফওয়াইআই: আমি কয়েকটি টেবিল থেকে বিভিন্ন কলামগুলি নির্বাচন করে একটি অস্থায়ী টেবিলের মধ্যে সঞ্চয় করার চেষ্টা করছি, যাতে অন্য অ্যাপ্লিকেশন সহজেই প্রস্তুত ডেটা আনতে পারে।

উত্তর:


175

আপডেটের জন্য

ব্যবহার করুন:

UPDATE table1 
   SET col1 = othertable.col2,
       col2 = othertable.col3 
  FROM othertable 
 WHERE othertable.col1 = 123;

INSERT এর জন্য

ব্যবহার করুন:

INSERT INTO table1 (col1, col2) 
SELECT col1, col2 
  FROM othertable

VALUESযদি আপনি INSERT মানগুলি জনসাধারণের জন্য একটি নির্বাচন ব্যবহার করে থাকেন তবে আপনার সিনট্যাক্সের দরকার নেই ।


1
আপডেট এবং সন্নিবেশ একত্রিত করা কি সম্ভব যাতে একটি ব্যর্থ হলে অপরটি ত্রুটি না ছুঁড়ে ব্যবহার করা হবে (প্রতিটি সারির জন্য স্বতন্ত্রভাবে)। আমি মনে করি যে এটি প্রশ্নের আরও সম্পূর্ণ সমাধান হবে (উদাহরণস্বরূপ: stackoverflow.com/a/6527838/781695 )
ব্যবহারকারী

26

ওএমজি পনিসের উত্তর পুরোপুরি কার্যকর করে, তবে আপনার আরও জটিল কিছু প্রয়োজন হলে এখানে কিছুটা আরও উন্নত আপডেট ক্যোয়ারীর উদাহরণ দেওয়া হয়েছে:

UPDATE table1 
SET col1 = subquery.col2,
    col2 = subquery.col3 
FROM (
    SELECT t2.foo as col1, t3.bar as col2, t3.foobar as col3 
    FROM table2 t2 INNER JOIN table3 t3 ON t2.id = t3.t2_id
    WHERE t2.created_at > '2016-01-01'
) AS subquery
WHERE table1.id = subquery.col1;

1
আপনি সেরা :) :)
অশ্বিনী

1
নিখুঁত। এটি সর্বোত্তমভাবে কাজ করে যেখানে আপনাকে আপডেট হওয়া টেবিলের সাথে জড়িত শর্তের ভিত্তিতে সাবসেট বাছাই করা দরকার।
mythicalcoder

@ ডেভিড নেমেনি আপনি কি এই কোয়েরিটি ব্যাখ্যা করতে পারবেন?
চিন্তন পাঠক

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