mysql :: तालिका में डालें, दूसरी तालिका से डेटा?


186

मैं सोच रहा था कि क्या विशुद्ध रूप से sql में ऐसा करने का कोई तरीका है:

q1 = SELECT campaign_id, from_number, received_msg, date_received 
     FROM `received_txts` WHERE `campaign_id` = '8';
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)    
    VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);

नोट: q1 लगभग 30k पंक्तियों में वापस आ जाएगी।

वहाँ कोई रास्ता है कि मैं सीधे sql में ऊपर का प्रयास कर रहा हूँ? केवल एक तालिका (मूल रूप से एक कच्चे डेटा तालिका) से डेटा को सीधे खींचने के लिए और दूसरी तालिका (मूल रूप से एक संसाधित डेटा तालिका) में डालें?

जवाबों:


400
INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date)  
SELECT campaign_id, from_number, received_msg, date_received
  FROM `received_txts`
 WHERE `campaign_id` = '8'

1
@InSane: 1) उत्तर 2 दें) प्रश्न प्रारूपण को सही करें। अगली बार आदेश याद मत करो ;-)
2

हा हा :-) yup..i मेरी प्राथमिकताओं को हल करने में कभी कामयाब नहीं रहे! :
जगमग

1
काम कर रहे! +1 सही और बहुत तेज़! धन्यवाद दोस्त। बस SELECT फ़ील्ड्स से ब्रैकेट्स निकालना था ...
कोई व्यक्ति

@zerkms; क्या इस INSERT INTO ... SELECTकथन से ट्रिगर काम करेगा ?
6

2
@ मुझे लगता है कि यह वैसा ही है जैसा कि यह सिर्फ एक "सामान्य" थाINSERT
झटके

30

पूरी पंक्ति के लिए

xyz2 में से xyz select * डालें जहाँ id = "1";

चयनित कॉलम के लिए

xyz2 से xyz (t_id, v_id, f_name) चुनें t_id, v_id, f_name जहाँ id = "1";

1
यदि एक मिलान प्राथमिक कुंजी के साथ पहले से मौजूद रिकॉर्ड है, तो पूरी पंक्ति दृष्टिकोण विफल हो जाता है।
हॉटएन

क्या आपको कोई समाधान मिला? <यदि एक मिलान प्राथमिक कुंजी के साथ पहले से मौजूद रिकॉर्ड है, तो पूरी पंक्ति का दृष्टिकोण विफल हो जाता है।>
शिवध्वज पांडे

10

झटके से उत्तर देना सही विधि है। लेकिन, यदि कोई व्यक्ति तालिका में अधिक अतिरिक्त कॉलम सम्मिलित करना चाहता है, तो आप इसे निम्न में से प्राप्त कर सकते हैं:

INSERT INTO action_2_members (`campaign_id`, `mobile`, `email`, `vote`, `vote_date`, `current_time`)
SELECT `campaign_id`, `from_number`, 'example@domain.xyz', `received_msg`, `date_received`, 1502309889 FROM `received_txts` WHERE `campaign_id` = '8'

उपरोक्त क्वेरी में, ईमेल और current_time नाम के 2 अतिरिक्त कॉलम हैं ।


2
क्या होगा यदि मैं चयन से समान मूल्यों के साथ डेटा की तीन पंक्तियों को सम्मिलित करना चाहता था, लेकिन ईमेल और current_time जैसे 'अतिरिक्त' कॉलम के लिए अलग-अलग मान जोड़े गए?
xxstevenxo

4
INSERT INTO Table1 SELECT * FROM Table2

यह बहुत कम गुणवत्ता वाला उत्तर है। साथ ही, स्वीकृत उत्तर के विपरीत, यह प्रश्न में शामिल जानकारी से संबंधित होने का प्रयास भी नहीं करता है।
माइक

0
INSERT INTO preliminary_image (style_id,pre_image_status,file_extension,reviewer_id,
uploader_id,is_deleted,last_updated) 

SELECT '4827499',pre_image_status,file_extension,reviewer_id,
uploader_id,'0',last_updated FROM preliminary_image WHERE style_id=4827488

विश्लेषण

यदि हम mysql में एक टेबल से दूसरी टेबल पर डेटा कॉपी करना चाहते हैं तो हम क्वेरी के ऊपर उपयोग कर सकते हैं

  1. यहां स्रोत और गंतव्य तालिका समान हैं, हम विभिन्न तालिकाओं का भी उपयोग कर सकते हैं।
  2. कुछ कॉलम जिन्हें हम style_id और is_deleted की तरह कॉपी नहीं कर रहे हैं, इसलिए हमने उन्हें दूसरी तालिका से हार्ड कोडित चुना है
  3. हमारे द्वारा स्रोत में उपयोग की गई तालिका में भी ऑटो इंक्रीमेंट फ़ील्ड शामिल है इसलिए हमने उस कॉलम को छोड़ दिया और यह क्वेरी के निष्पादन के साथ स्वचालित रूप से सम्मिलित हो जाता है।

निष्पादन परिणाम

1 प्रश्नों का निष्पादन, 1 सफलता, 0 त्रुटियां, 0 चेतावनी

प्रश्न: प्रारंभिक_मेंज (style_id, pre_image_status, file_extension, reviewer_id, uploader_id, is_deleted, last_updated) का चयन करें ...

5 पंक्ति (ओं) को प्रभावित किया

निष्पादन समय: 0.385 सेकंड स्थानांतरण समय: 0 सेकंड कुल समय: 0.386 सेकंड

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.