MySQL: SQL क्वेरी में प्रत्येक परिणाम के लिए रिकॉर्ड कैसे सम्मिलित करें?


84

कहो मेरे पास एक चयन है

SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';

जो कुछ रिकॉर्ड लौटाता है।

मैं परिणाम सेट में पहुंच पंक्ति के लिए एक प्रविष्टि कैसे कर सकता हूं जैसे

INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');

परिणाम सेट में पंक्ति के क्षेत्र कहाँ @idऔर कहाँ @customer_idहैं?

संपादित करें: मैं इसे केवल डुप्लिकेट नहीं करना चाहता था, लेकिन domainइसके बजाय फ़ील्ड में एक नया मान डालें । फिर भी एक चेहरा-स्थिति, जैसा कि यह आसान है ;-) धन्यवाद!


आप अपने द्वारा चुने गए रिकॉर्ड की नकल करना चाहते हैं?
ethrbunny

आप फिर से उसी तालिका में उसी तालिका के रिकॉर्ड क्यों डाल रहे हैं? यह डुप्लिकेट बनाएगा
सचिन शानबाग

क्षमा करें दोस्तों, यह सवाल बहुत ही बेवकूफी भरा
acme

हर किसी को अपने सवालों का जवाब देने के लिए एक दोस्त की जरूरत होती है। आपके प्रयास के लिए मैं पुरस्कार: [ nerdmeritbadges.com/products/rubberduck]
जेफ फ्रिट्ज़

मेरे पास एक ही मुद्दा है। उदाहरण के लिए, जिस तरह से तालिका को डिज़ाइन किया गया है, मुझे किसी अन्य उपयोगकर्ता प्रविष्टियों को दोहराने की आवश्यकता है लेकिन 356 रिकॉर्ड हैं जो मुझे एक नए उपयोगकर्ता को दोहराने की आवश्यकता है।
केसी

जवाबों:


160

इस रूप में सरल:

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, domain FROM config;

यदि आप www.example.comडोमेन के रूप में " " चाहते हैं , तो आप कर सकते हैं:

INSERT INTO config (id, customer_id, domain) 
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;

1
लेकिन यह domain'www.example.com' के सेट के साथ एक नया रिकॉर्ड नहीं डालता है, यह केवल सभी प्रविष्टियों की नकल करता है।
एक्मे

आप रहे हों तो सही-यह इस रूप में सरल रूप में है - के लिए एक सरल समस्या एक सरल उपाय facepalm धन्यवाद ;-)
एक्मे

मैं बस इस हा को संग्रहीत करने के लिए जटिल जुड़ाव लिखने जा रहा था। आपका बहुत बहुत धन्यवाद! आसान नहीं हो सका।
C4d

2
आप कुछ हफ्तों के
माइंडलेस

@ArtemAnkudovich खुशी है कि मैं मदद की हो सकता है :)
krtek

7
INSERT INTO config (id, customer_id, domain)
SELECT id, customer_id, 'www.example.com' FROM (
  SELECT DISTINCT id, customer_id, domain FROM config
  WHERE type = 'foo'
) x;

1
इस तरह से एक सबकुछ करने की कोई आवश्यकता नहीं है। अन्य उत्तरों की जाँच करें
krtek

Krtek: कौन सा जवाब, वास्तव में, क्या आप सुझाव दे रहे हैं? मुझे 4 अन्य उत्तर दिखाई देते हैं और प्रत्येक किसी तरह से गलत है।
केन

किस तरीके से गलत हैं? कम से कम मेरी दूसरी क्वेरी और जेफ फ्रिट्ज में से एक के परिणाम आपके जैसे ही हैं।
क्रेटा

1
Krtek: यदि तालिका में रिकॉर्ड (1,1, "ए," फू ") और (1,1," बी "," फू ") हैं, तो प्रश्न में पहला प्रश्न रिटर्न (1,1," ए) "), (1,1," बी "), इसलिए पूछा गया, रिकॉर्ड (1,1," example.com ") को दो बार डाला जाना चाहिए। आपका उत्तर स्ट्रिंग शाब्दिक "example.com" से अलग है, इसलिए (1,1, "example.com") केवल एक बार डाला जाता है।
केन

5
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config

इस सिंटैक्स के लिए MySQL प्रलेखन यहाँ है:

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html


धन्यवाद, लेकिन मैं प्रत्येक क्षेत्र की नकल नहीं करना चाहता था, क्षेत्र 'डोमेन' अलग होना चाहिए। लेकिन यह सरल है फिर भी और मैं सिर्फ इस बेवकूफ समस्या के साथ फंस गया था।
acme

4

EDIT - @ Krtek के उत्तर पर टिप्पणी पढ़ने के बाद।

मुझे लगता है कि आप डालने के बजाय एक अद्यतन के लिए पूछ रहे हैं -

update config set domain = 'www.example.com'

यह बिना किसी डुप्लिकेट प्रविष्टियों के निर्माण के साथ डोमेन के साथ सभी मौजूदा रिकॉर्ड को 'www.example.com' के रूप में अपडेट करेगा।

पुराने जवाब -

आप कुछ का उपयोग कर सकते हैं जैसे -

INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config

नोट: - यदि आपके पास प्राथमिक कुंजी के रूप में आईडी है तो यह काम नहीं करेगा


धन्यवाद, लेकिन मैं प्रत्येक क्षेत्र की नकल नहीं करना चाहता था, क्षेत्र 'डोमेन' अलग होना चाहिए। लेकिन यह सरल है फिर भी और मैं सिर्फ इस बेवकूफ समस्या के साथ फंस गया था।
अकमे

@acme - यदि आप इन्सर्ट का उपयोग करते हैं, तो यह निश्चित रूप से परिणामों को डुप्लिकेट करेगा और यदि आपने अपनी आईडी को प्राथमिक कुंजी के रूप में चिह्नित किया है, तो यह आपको पंक्तियों को सम्मिलित करने की अनुमति नहीं देगा।
सचिन शांभग

-6

इस SQL ​​कथन को निष्पादित करें:

-- Do nothing.

आप "कॉन्फ़िगर" से अलग पंक्तियों का चयन करना चाहते हैं, और उन्हीं पंक्तियों को एक ही तालिका में सम्मिलित करते हैं। वे पहले से ही वहाँ हैं। कुछ करने को नहीं है।

जब तक आप वास्तव में "डोमेन" कॉलम में कुछ या सभी मूल्यों को अपडेट करना चाहते हैं। इसके लिए एक अद्यतन कथन की आवश्यकता होगी जिसने वास्तव में कुछ किया हो।


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