एक कॉलम से दूसरे कॉलम में डेटा कॉपी करें (जो एक अलग तालिका में है)


89

मैं डेटा को एक कॉलम से दूसरे टेबल के दूसरे कॉलम में कॉपी करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

मैंने निम्नलिखित कोशिश की:

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

लेकिन यह काम नहीं करता।

मैं "BusinessNountry" कॉलम की कॉन्टैक्ट टेबल के कॉलम को "CountryName" के टैबलिंडेंटाइम टेबल के कॉपी करना चाहता हूं।


1
स्तंभों को एक तालिका से दूसरी तालिका में कॉपी करने के लिए, आपको तालिकाओं के बीच किसी प्रकार के संबंध की आवश्यकता है। क्या दो तालिकाओं में एक सामान्य आईडी है?
mdma

1
आप किस डेटाबेस और संस्करण का उपयोग कर रहे हैं?
मार्क बायर्स

जवाबों:


88

SQL Server 2008 में आप निम्नानुसार एक मल्टी-टेबल अपडेट का उपयोग कर सकते हैं:

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

आपको यह निर्दिष्ट करने के लिए कि किस पंक्ति को अद्यतन किया जाना चाहिए, एक ज्वाइन कंडीशन की आवश्यकता है।

यदि लक्ष्य तालिका वर्तमान में खाली है, तो आपको इसके बजाय एक INSERT का उपयोग करना चाहिए:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
उर प्रतिनिधि के लिए हाय धन्यवाद, लेकिन यह मुझे निम्नलिखित त्रुटि दिखा रहा है मान को कॉलम 'इंडियनटाइम', तालिका 'tqms.dbo.tblindiantime' में नहीं डाला जा सकता; कॉलम नल की अनुमति नहीं देता है। INSERT विफल। बयान समाप्त कर दिया गया है।
अमित पाटिल

2
@AmitPatil - मुझे पता है कि यह पुराना है लेकिन आप जैसे किसी व्यक्ति की मदद कर सकता है। केवल contacts.BusinessCountry के बजाय ISNULL (contacts.BusinessCountry, '') का उपयोग करें और यह आपकी समस्या का समाधान करना चाहिए। हम मूल रूप से रिक्त स्ट्रिंग के साथ नल की जगह ले रहे हैं।
अंकुर-मी।

1
क्योंकि यह उदाहरण यह नहीं दिखाता है कि "ज्वाइन कंडीशन" क्या हो सकती है, माइकल पैखानोव के जवाब और सीड्रिकडलब के उत्तर को भी देखें , और परवीन का जवाब भी इसी तरह के प्रश्न पर दिया जाए, जहां दो पंक्तियों की तुलना सही पंक्ति चुनने के लिए की जानी चाहिए
टूलमेकरसेव

152

यहाँ प्रश्न है:

एक ही तालिका:

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 टेबल शामिल हैं।
bPratik

2
स्तंभों के मामले में mysql के लिए इसका काम एक ही तालिका से संबंधित है।
सतीश पांडेय

11
हालाँकि यह मेरी समस्या को हल करता है, और मैं यहाँ प्रश्न शीर्षक के माध्यम से मिला, जो शायद इस उत्तर से अधिक मेल खाता है, यह प्रश्न में विस्तार से मेल खाता है!
रोब ग्रांट

6
यह उत्तर प्रश्न के शीर्षक का उत्तर देता है, प्रश्न के बजाय। फिर भी, मुझे यह उपयोगी लगा कि मैं क्या करने की कोशिश कर रहा था।
जादूगर07 केएसयू

1
यह एक उत्कृष्ट उत्तर है; इसने मुझे अपने बैकअप से केवल एक कॉलम को मुख्य तालिका में कॉपी करने में मदद की!
जेल्टर एडी

22

Table2.Column2 => Table1.Column1

मुझे एहसास है कि यह सवाल पुराना है लेकिन स्वीकृत जवाब मेरे काम नहीं आया। भविष्य के गोगलर्स के लिए, यह मेरे लिए काम कर रहा है:

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

जिससे:

  • तालिका 1 = तालिका जिसमें स्तंभ है जिसे अद्यतन करने की आवश्यकता है
  • तालिका 2 = तालिका जिसमें डेटा के साथ कॉलम है
  • कॉलम 1 = खाली कॉलम जिसे कॉलम 2 से डेटा की जरूरत है (यह तालिका 1 में है)
  • column2 = कॉलम जिसमें डेटा है (वह तालिका 2 में है)

1
मेरे लिए काम किया है - लेकिन द्वारा उपरोक्त जवाब के रूप में एक ही है[Michael Pakhantsov]
डॉन चीडल

3
आप सही हैं, @mmcra, कि यह अब ऊपर दिए गए उत्तर के समान है। हालाँकि, यह उस समय नहीं था जब मैंने यह टिप्पणी लिखी थी। आप देखेंगे कि यह Sept में संपादित किया गया था और त्रुटियों को ठीक किया गया था। मैंने यह टिप्पणी जून में लिखी थी।
केनी ग्रेज

16

आशा है कि आपके पास कुंजी फ़ील्ड दो तालिकाओं है।

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

1
यह केवल तभी मान्य है जब आप एक फ़ील्ड को एक दूसरे फ़ील्ड से प्रतिस्थापित करते हैं, अगर यह ORA-01427: single-row subquery returns more than one rowएक पंक्ति से अधिक रिटर्न का चयन करता है, तो क्या होगा यदि मैं एक से अधिक पंक्ति का चयन करना चाहता हूं और इन मानों के साथ कॉलम अपडेट करना चाहता हूं?
मुहम्मद रामाही

3
@ मुहम्मद रामाही, क्या आपके पास अपडेट कॉलम में नेस्टेड टेबल है? सबक्वेरी में कई पंक्तियाँ लौटती हैं, तो कुंजी संपर्क तालिका के लिए प्राथमिक नहीं है। यदि आपके पास समग्र प्राथमिक कुंजी है, तो आपको बस शर्तों की आवश्यकता है कि कहां है।
माइकल पाकींटोव

1
मुझे समझ नहीं आ रहा है कि "क्या मतलब है कि आपके पास महत्वपूर्ण क्षेत्र दो टेबल है"
मार्को लैकोविक

2
@ क्रिग - उनका स्पष्ट रूप से मतलब है "यदि दो तालिकाओं में एक साझा कुंजी फ़ील्ड है जो यह पहचानने के लिए है कि प्रत्येक तालिका की पंक्ति दूसरी तालिका की पंक्ति से मेल खाती है" । यदि आप ऐसा नहीं करते हैं, तो आपको बदलने की जरूरत है कि आखिर क्या है WHERE। उदाहरण के लिए, यदि tblindiantime में फ़ील्ड है ContactID, जो IDकि पंक्ति की है contactsजिसमें tblindiantime में प्रत्येक पंक्ति के साथ है, तो आप उपयोग करेंगे WHERE tblindiantime.ContactID=contacts.ID। एक और भिन्नता के लिए cedrikdlb का उत्तर देखें ।
टूलमेकरसेव

8

इसी तरह के प्रश्न के उत्तर ने मेरे लिए इस प्रश्न के चयनित उत्तर (मार्क बायर्स द्वारा) से अधिक सही ढंग से काम किया । मार्क के जवाब का उपयोग करते हुए, मेरे अपडेट किए गए कॉलम को सभी पंक्तियों में समान मूल्य मिला (शायद पहली पंक्ति से वह मूल्य जो जुड़ने से मेल खाता था)। दूसरे थ्रेड से ParveenaArora के उत्तर का उपयोग करके कॉलम को सही मानों के साथ अपडेट किया गया।

इस सवाल 'तालिका और स्तंभ नामों का उपयोग करने के लिए परवीना के समाधान को बदलना, प्रश्न इस प्रकार होगा (जहां मुझे लगता है कि तालिका tblindiantime.contact_id के माध्यम से संबंधित हैं):

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

3

मुझे लगता है कि पिछले सभी उत्तर सही हैं, यह नीचे दिया गया कोड विशेष रूप से मान्य है यदि आपको एक साथ कई पंक्तियों को अपडेट करना है, तो ध्यान दें: यह PL / SQL है

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 के साथ अधिक आसान है।

SQL सर्वर प्रबंधन स्टूडियो का उपयोग करना

एक टेबल से दूसरे टेबल पर डेटा कॉपी करने के लिए

1. जिस तालिका को आप कॉपी करना चाहते हैं, उसके साथ तालिका को खोलें और जिस पर आप कॉपी करना चाहते हैं, उसे टेबल पर राइट-क्लिक करके और फिर डिज़ाइन पर क्लिक करके ।

2. उन कॉलम के साथ तालिका के लिए टैब पर क्लिक करें जिन्हें आप कॉपी करना चाहते हैं और उन कॉलम का चयन करें।

3. संपादन मेनू से, कॉपी पर क्लिक करें

4. एक नया क्वेरी संपादक विंडो खोलें।

5. क्वेरी संपादक पर राइट-क्लिक करें, और उसके बाद संपादक में डिज़ाइन क्वेरी पर क्लिक करें ।

6. तालिका जोड़ें संवाद बॉक्स में, स्रोत और गंतव्य तालिका का चयन करें , जोड़ें पर क्लिक करें और फिर तालिका जोड़ें संवाद बॉक्स को बंद करें ।

7. क्वेरी संपादक के खुले क्षेत्र पर क्लिक करें , बदलें प्रकार को इंगित करें और फिर परिणाम सम्मिलित करें पर क्लिक करें

8. सम्मिलित करें परिणाम संवाद बॉक्स के लिए लक्ष्य तालिका चुनें, गंतव्य तालिका चुनें।

9. क्वेरी डिज़ाइनर के ऊपरी भाग में, स्रोत तालिका में स्रोत कॉलम पर क्लिक करें।

10. क्वेरी डिज़ाइनर ने अब एक INSERT क्वेरी बनाई है। क्वेरी को मूल क्वेरी संपादक विंडो में रखने के लिए ठीक क्लिक करें।

11. स्रोत तालिका से गंतव्य तालिका में डेटा सम्मिलित करने के लिए क्वेरी निष्पादित करें।

अधिक जानकारी के लिए https://docs.microsoft.com/en-us/sql/relational-dat डेटाबेस / tables / copy- columns-from- one- table- to- another- database- engine


1

इसे विभिन्न विशेषताओं का उपयोग करके हल किया जा सकता है।

  • सेल कंट्रोल क्लिक इवेंट का उपयोग करें।
  • उस स्तंभ मान का चयन करें, जो आपके एथर कॉलम पर जाता है।
  • चयनित मान को किसी अन्य टेक्स्ट बॉक्स या स्तर पर भेजें जो आप सुविधाजनक और चयनित संपत्ति को संशोधित करने के लिए एक पूरक बटन भरते हैं।
  • पूरे स्टैक को डेटाबेस से अपडेट करें और इसे एक दूसरे कॉलम में स्थानांतरित करने के लिए इसे दूर करने के लिए sql क्वेरी के साथ एक एल्गोरिथ्म बनाएं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.