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


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

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 बजाय। फिर भी एक चेहरे की स्थिति के रूप में यह सादा आसान है ;-) धन्यवाद!


65
2018-03-09 14:52


मूल


आप अपने द्वारा चुने गए रिकॉर्ड्स को डुप्लिकेट करना चाहते हैं? - ethrbunny
आप एक ही टेबल में रिकॉर्ड्स को उसी टेबल में क्यों डालेंगे? यह डुप्लिकेट बनाएगा - Sachin Shanbhag
क्षमा करें दोस्तों, यह सवाल बहुत बेवकूफ था, मैं बस एक बहुत ही साधारण समस्या से फंस गया था facepalm - acme
हर किसी को अपने दोस्तों को हर बार जवाब देने के लिए एक दोस्त की जरूरत होती है। आपके प्रयास के लिए मैं पुरस्कार देता हूं: [nerdmeritbadges.com/products/rubberduck] - Jeff Fritz
मुझे एक ही समस्या है। उदाहरण के लिए, जिस तरह से टेबल डिज़ाइन किया गया है, मुझे अन्य उपयोगकर्ताओं की प्रविष्टियों को दोहराने की आवश्यकता है लेकिन 356 रिकॉर्ड्स हैं जिन्हें मुझे नए उपयोगकर्ता को दोहराने की आवश्यकता है। - Casey


जवाब:


इस तरह के रूप में सरल:

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;

123
2018-03-09 14:55



लेकिन इसमें एक नया रिकॉर्ड नहीं है domain 'www.example.com' पर सेट करें, यह बस सभी प्रविष्टियों को डुप्लिकेट करता है। - acme
@acme मैंने अपना जवाब अपडेट किया :) - krtek
आप सही हैं - यह उतना सरल है - एक साधारण समस्या का एक सरल समाधान facepalm धन्यवाद ;-) - acme
कोई समस्या नहीं, हम सभी के पास इन चेहरे के क्षण हैं;) - krtek
आपने दिमागी टेम्पलेट के कुछ हफ्तों की संपादकीय टीम को बदल दिया है :-) - Artem Ankudovich


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;

6
2018-03-09 14:58



इस तरह एक सबक्वायरी करने की कोई ज़रूरत नहीं है। अन्य उत्तरों की जांच करें - krtek
Krtek: आप कौन सा जवाब, ठीक है, आप सुझाव दे रहे हैं? मैं 4 अन्य उत्तरों देखता हूं और प्रत्येक किसी भी तरह से गलत है। - Ken
किस तरह गलत हैं? कम से कम मेरी दूसरी क्वेरी और जेफ फ़्रिट्ज़ के एक के समान परिणाम हैं। - krtek
Krtek: यदि तालिका में रिकॉर्ड हैं (1,1, "ए", "foo") और (1,1, "बी", "foo"), तो प्रश्न में पहली क्वेरी रिटर्न (1,1, "ए "), (1,1," बी "), जैसा कि पूछा गया था, रिकॉर्ड (1,1," example.com ") दो बार डाला जाना चाहिए। आपका उत्तर स्ट्रिंग अक्षर "example.com" के साथ एक अलग है, इसलिए (1,1, "example.com") केवल एक बार डाला जाता है। - Ken


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


5
2018-03-09 14:56



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


संपादित करें- @ 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

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


3
2018-03-09 14:56



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


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

-- Do nothing.

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

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


-4
2018-03-09 15:01



मेरा जवाब स्पष्ट रूप से विनोदी है, और ओपी एक चेहरे पर स्वीकार करता है। मैं उस से भी शर्मिंदा नहीं हूँ। - Mike Sherrill 'Cat Recall'