এক কলাম থেকে অন্য কলামে ডেটা অনুলিপি করুন (যা একটি আলাদা টেবিলের মধ্যে রয়েছে)


89

আমি এক কলাম থেকে অন্য টেবিলের অন্য কলামে ডেটা অনুলিপি করতে চাই। আমি এটা কিভাবে করবো?

আমি নিম্নলিখিত চেষ্টা করেছিলাম:

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

তবে এটি কার্যকর হয়নি।

আমি যোগাযোগের টেবিলের "বিজনেসকাউন্ট্রি" কলামটি টিবিলিডিয়ানটাইম টেবিলের "কান্ট্রিনেম" কলামে অনুলিপি করতে চাই।


4
এক টেবিল থেকে অন্য টেবিলের কলামগুলি অনুলিপি করতে আপনার টেবিলগুলির মধ্যে এক ধরণের সম্পর্ক প্রয়োজন। দুটি টেবিলের একটি সাধারণ আইডি আছে?
এমডিএমএ

4
আপনি কোন ডাটাবেস এবং সংস্করণ ব্যবহার করছেন?
মার্ক বাইয়ার্স

উত্তর:


89

এসকিউএল সার্ভার ২০০৮ এ আপনি নীচে মাল্টি-টেবিল আপডেট ব্যবহার করতে পারেন:

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

কোন সারিটি আপডেট করা উচিত তা নির্দিষ্ট করতে আপনার একটি যোগদানের শর্ত প্রয়োজন।

যদি লক্ষ্য সারণীটি বর্তমানে খালি থাকে তবে আপনার পরিবর্তে একটি INSERT ব্যবহার করা উচিত:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

4
আপনার প্রতিবেদনের জন্য হাই ধন্যবাদ, তবে এটি আমাকে ত্রুটির পরে দেখিয়ে দিচ্ছে, 'ইন্ডিয়ানটাইম' কলাম, টেবিল 'tqms.dbo.tblindiantime' তে NUL মান সন্নিবেশ করা যায় না; কলামটি নালার অনুমতি দেয় না। INSERT ব্যর্থ হয়। বিবৃতিতে বাতিল করা হয়েছে।
অমিত পাতিল

4
@ অ্যামিটপ্যাটিল - আমি জানি এটি পুরানো তবে আপনার মতো কাউকে সাহায্য করতে পারে। কেবল পরিচিতির পরিবর্তে আইএসএনএলএল (কন্টাক্টস.বসনেশনারি, '') ব্যবহার করুন usবসনেসকন্ট্রি এবং এটি আপনার সমস্যার সমাধান করা উচিত। আমরা মূলত শূন্য স্ট্রিং দিয়ে নালটি প্রতিস্থাপন করছি।
অঙ্কুর-মি

4
কারণ এই উদাহরণটি "যোগদানের শর্ত" কী হতে পারে তা দেখায় না, মাইকেল পাখান্তসভের উত্তর এবং সিড্রিকড্লাবের উত্তর এবং পারভিনের একটি অনুরূপ প্রশ্নের উত্তর, যেখানে দুটি স্তম্ভকে সঠিক সারির তুলনায় তুলনা করতে হবে
টুলমেকারস্টেভ

153

এখানে ক্যোয়ারী:

একই টেবিল:

UPDATE table_name 
SET column1 = column2

বিভিন্ন সারণী:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
প্রশ্নের প্রসঙ্গে ভুল, যেখানে প্রশ্নকারী বিশেষত 2 টেবিল জড়িত।
বিপ্রতিক

4
এটি কলামগুলির ক্ষেত্রে মাইএসকিএল-এর জন্য কাজ করা একই টেবিলে সম্পর্কিত।
সতীশ পান্ডে

11
এটি যাইহোক আমার সমস্যার সমাধান করে, এবং আমি এখানে প্রশ্নের শিরোনামের মাধ্যমে পেয়েছি যা সম্ভবত এই উত্তরটি প্রশ্নের সাথে মেলে তার চেয়ে বেশি মেলে!
রব গ্রান্ট

6
এই উত্তরটি প্রশ্নের নিজের প্রশ্নের চেয়ে বরং প্রশ্নের শিরোনামের উত্তর দেয়। তবুও, আমি যা করার চেষ্টা করছিলাম তার জন্য এই দরকারীটি পেয়েছি।
উইজার্ড07 কেএসইউ

4
এটি একটি দুর্দান্ত উত্তর; এটি আমার ব্যাকআপ থেকে মূল টেবিলটিতে কেবল একটি কলাম অনুলিপি করতে সহায়তা করেছিল!
জেল্টার অ্যাডি

22

টেবিল 2.কলাম 2 => টেবিল 1.কলাম 1

আমি বুঝতে পারি এই প্রশ্নটি পুরানো তবে স্বীকৃত উত্তরটি আমার পক্ষে কার্যকর হয়নি। ভবিষ্যতের গুগলদের জন্য, এটি আমার পক্ষে কাজ করেছে:

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

এর মাধ্যমে:

  • টেবিল 1 = টেবিলের কলাম রয়েছে যাতে আপডেট হওয়া দরকার
  • টেবিল 2 = টেবিলের সাথে ডেটা সহ কলাম রয়েছে
  • কলাম 1 = ফাঁকা কলাম যার জন্য কলাম 2 থেকে ডেটা প্রয়োজন (এটি টেবিল 1 এ রয়েছে)
  • কলাম 2 = কলামে ডেটা রয়েছে (এটি টেবিল 2 এ রয়েছে)

4
আমার জন্য কাজ করেছেন - তবে উপরের উত্তরের মতই[Michael Pakhantsov]
ডন

4
আপনি ঠিক বলেছেন, @ মিমক্রা, এখন এটি উপরের উত্তরের মতোই। যাইহোক, আমি এই মন্তব্যটি লিখেছিলাম যে সময় একই ছিল না। আপনি লক্ষ্য করবেন যে এটি সেপ্টেম্বরে সম্পাদিত হয়েছিল এবং ত্রুটিগুলি স্থির হয়েছিল। আমি জুনে এই মন্তব্য লিখেছিলাম।
কেনে গ্র্যাজ

16

আশা করি আপনার কী ক্ষেত্র দুটি টেবিল।

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

4
এটি কেবলমাত্র বৈধ যদি আপনি একটি ক্ষেত্রকে অন্য একটি ক্ষেত্রের দ্বারা প্রতিস্থাপন করেন তবে এটি ছুঁড়ে যাবে ORA-01427: single-row subquery returns more than one rowযদি নির্বাচনটি একাধিক সারির চেয়ে বেশি সারি দেয় তবে আমি যদি একাধিক সারি নির্বাচন করতে এবং এই মানগুলির সাথে কলামটি আপডেট করতে চাই তবে কী হবে?
মুহাম্মদ বিকেট

4
@ মুহাম্মাদ রামাহী, আপনি কি আপডেট কলামে টেবিল বাসা বেঁধেছেন? সাবকিউরিতে কয়েকটি সারি ফেরত দেয়, তারপরে কী যোগাযোগের সারণির জন্য প্রাথমিককি নয়। আপনার যদি সম্মিলিত প্রাথমিক কী থাকে তবে আপনাকে কেবল যেখানে শর্তের শর্ত প্রয়োজন।
মাইকেল পাখান্তসভ 15

4
"আশা করি আপনার কী ক্ষেত্র দুটি টেবিল"
মার্কো ল্যাকোভিচ

4
@ ক্রিজে - তার স্পষ্টতই অর্থ হল "যদি প্রতিটি টেবিলের কোন সারিটি অন্য টেবিলের সারিটির সাথে মিলে যায় তা সনাক্ত করার জন্য যদি দুটি টেবিলের একটি ভাগ কী ক্ষেত্র থাকে" । যদি আপনি তা না করেন, তবে আপনাকে পরে কী পরিবর্তন করতে হবে WHERE। উদাহরণস্বরূপ, যদি tblindiantime ক্ষেত্র রয়েছে ContactID, যা IDসারির মধ্যে contactsযা tblindiantime প্রতিটি সারি সঙ্গে জন্যে, তাহলে আপনি ব্যবহার করেন WHERE tblindiantime.ContactID=contacts.ID। আরেকটি প্রকরণের জন্য সিড্রিকড্লাবের উত্তর দেখুন ।
টুলমেকারস্টেভ

8

অনুরূপ প্রশ্নের উত্তর আমার কাছে এই প্রশ্নের নির্বাচিত উত্তরের চেয়ে বেশি সঠিকভাবে কাজ করেছে (মার্ক বাইয়ার্স দ্বারা)। মার্কের উত্তরটি ব্যবহার করে, আমার আপডেট হওয়া কলামটি সমস্ত সারিতে একই মান পেয়েছে (সম্ভবত প্রথম সারির মানটি যা যোগটির সাথে মিলছে)। অন্য থ্রেড থেকে পারভীনআরওর উত্তর ব্যবহার করে সঠিক মান সহ কলামটি আপডেট করা হয়েছে।

এই প্রশ্নের টেবিল এবং কলামের নামগুলি ব্যবহার করার জন্য পারভিনার সমাধানকে রূপান্তরিত করে, কোয়েরিটি নীচে হবে (যেখানে আমি ধরে নিই যে টেবিলগুলি tblindiantime.contact_id এর মাধ্যমে সম্পর্কিত):

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

আমি মনে করি যে পূর্ববর্তী সমস্ত উত্তর সঠিক, নীচের কোডটি খুব কার্যকর যদি বিশেষভাবে আপনার একবারে একাধিক সারি আপডেট করতে হয় তবে দ্রষ্টব্য: এটি পিএল / এসকিউএল

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

আমি আশা করি এটি সাহায্য করতে পারে।


2

ম্যানেজমেন্ট স্টুডিও 2016 এর সাথে এটি আরও সহজ।

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে

এক টেবিল থেকে অন্য টেবিলে ডেটা অনুলিপি করতে

1. আপনি যে কলামগুলি অনুলিপি করতে চান এবং যে টেবিলগুলিতে অনুলিপি করতে চান সেগুলি দিয়ে টেবিলটি খুলুন টেবিলগুলিতে ডান ক্লিক করে এবং তারপরে ডিজাইন ক্লিক করুন ।

আপনি যে কলামগুলি অনুলিপি করতে চান এবং সেই কলামগুলি নির্বাচন করতে চান তা টেবিলের জন্য ট্যাবে ক্লিক করুন।

3. সম্পাদনা মেনু থেকে, অনুলিপি ক্লিক করুন ।

4. একটি নতুন ক্যুরিয়ার সম্পাদক উইন্ডো খুলুন।

5. ক্যোয়ারী এডিটরটি রাইট-ক্লিক করুন এবং তারপরে সম্পাদক এ ডিজাইন ক্যোয়ারী ক্লিক করুন ।

6.In সারণি যোগ করুন ডায়ালগ বক্সের উত্স এবং গন্তব্য সারণি নির্বাচন করুন, ক্লিক করুন যোগ ঘনিষ্ঠ, এবং তারপর সারণি যোগ করুন ডায়লগ বক্স।

The. ক্যোয়ারী সম্পাদকের একটি উন্মুক্ত অঞ্চলটিতে রাইট-ক্লিক করুন, চেঞ্জ টাইপের দিকে নির্দেশ করুন এবং তারপরে ফলাফল সন্নিবেশ ক্লিক করুন ।

৮. ফলাফল সন্নিবেশ করানোর জন্য লক্ষ্য সারণি চয়ন করুন, গন্তব্য সারণীটি নির্বাচন করুন।

9. কোয়েরি ডিজাইনারের উপরের অংশে, উত্স সারণীতে উত্স কলামটি ক্লিক করুন।

10. ক্যোয়ারি ডিজাইনার এখন একটি INSERT কোয়েরি তৈরি করেছে। মূল ক্যোয়ারী সম্পাদক উইন্ডোটিতে কোয়েরিটি স্থাপন করতে ওকে ক্লিক করুন।

11. উত্স টেবিল থেকে গন্তব্য সারণিতে ডেটা toোকাতে ক্যোরিটি বন্ধ করুন।

আরও তথ্যের জন্য https://docs.microsoft.com/en-us/sQL


1

এটি বিভিন্ন অ্যাট্রিবিউট ব্যবহার করে সমাধান করা যেতে পারে।

  • সেল কন্ট্রোল ক্লিক ইভেন্ট ব্যবহার করুন।
  • আপনার অ্যান্থার কলামে স্থানান্তরিত কলাম মানটি নির্বাচন করুন।
  • নির্বাচিত মানটিকে অন্য পাঠ্য বাক্স বা স্তরে প্রেরণ করুন যা আপনি পছন্দ করেন তা পূরণ করুন এবং নির্বাচিত সম্পত্তিটি পরিবর্তনের জন্য পরিপূরক বোতামটি দিন।
  • পুরো স্ট্যাকটি অপ্ট ডেটাবেস আপডেট করুন এবং এটিকে অন্য কলামে স্থানান্তর করতে এটি থেকে উত্তরণের জন্য বর্গ কোয়েরি দিয়ে একটি অ্যালগরিদম তৈরি করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.