2011-09-20 22 views
99

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

तालिका 1 (मौजूदा तालिका):

aid  
st_id 
from_uid 
to_gid 
to_uid 
created 
changed 
subject 
message 
link 

तालिका 2 (नया टेबल)

st_id 
uid 
changed 
status 
assign_status 

मैं तालिका में तालिका 1 से डेटा के कुछ क्षेत्रों की प्रतिलिपि बनाना चाहते 2.

क्या यह MySQL क्वेरी का उपयोग करके किया जा सकता है?

+1

क्या यह एक बार नौकरी है या आप इसे नियमित रूप से करने की योजना बना रहे हैं? – jdias

+0

@@ jdias: अब तक यह एक बार नौकरी है .. – Fero

+0

@jdias स्पष्टीकरण के लिए, यदि यह एक बार नौकरी नहीं है, तो इसके बजाय MySQL नोब क्या करना चाहिए? – Seanny123

उत्तर

187

यह तुम क्या चाहते हो जाएगा:

INSERT INTO table2 (st_id,uid,changed,status,assign_status) 
SELECT st_id,from_uid,now(),'Pending','Assigned' 
FROM table1 

आप table1 से सभी पंक्तियों को शामिल करना चाहते हैं। अन्यथा यदि आप तालिका 1 का केवल एक सबसेट जोड़ना चाहते हैं तो आप अंत में एक WHERE कथन जोड़ सकते हैं।

मुझे आशा है कि इस मदद करता है।

+0

यह काम नहीं कर रहा है ... – SANDEEP

+0

बढ़िया, यह देखने के लिए खुशी है कि टी-एसक्यूएल में जो भी इस्तेमाल किया गया है, वही है। – jpierson

+0

MySQL से प्यार करने का एक और कारण, बहुत सहज! – peceps

2
SELECT * 
INTO newtable [IN externaldb] 
FROM table1; 

http://www.w3schools.com/sql/sql_select_into.asp

+0

काम नहीं करता है। प्रति [दस्तावेज़] (http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html), "MySQL सर्वर चयन का समर्थन नहीं करता है ... INTO टेबल Sybase SQL एक्सटेंशन " – Bryan

4

सबसे अच्छा विकल्प mysql में सम्मिलित करें ... SELECT कथन का प्रयोग है।

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

+1

सहज ज्ञान युक्त :) मुझे यह पसंद है। यह एक सामान्य चयन कथन है, जो "इंसर्ट इंंटो" की एक पंक्ति से पहले है। –

18

आप आसानी से किसी अन्य तालिका से डेटा प्राप्त कर सकते हैं। आपको केवल वही फ़ील्ड जोड़ना होगा जो आप चाहते हैं।

mysql क्वेरी है:

INSERT INTO table_name1(fields you want) 
    SELECT fields you want FROM table_name2 


जहां, मूल्यों table2 से नकल कर रहे हैं Table1 को

49

आप क्षेत्रों को सूचीबद्ध नहीं करना चाहते हैं, और टेबल की संरचना है एक ही है, तो आप कर सकते हैं:

INSERT INTO `table2` SELECT * FROM `table1`; 

या आप एक ही संरचना के साथ एक नई तालिका बनाने के लिए चाहते हैं:

CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl; 

Reference for insert select; Reference for create table select

+1

कॉपी करने से पहले नया टेबल 2 बनाना होगा, क्यों '[AS] 'वर्ग ब्रैकेट में है, –

+1

में' AS' द्वारा क्या किया जाता है यह इंगित करता है कि शब्द वैकल्पिक है। यह इस तरह लिखा गया है क्योंकि मैंने दस्तावेज़ों की प्रतिलिपि बनाई और चिपकाया; यह कुछ भी नहीं जोड़ता है। मुझे लगता है कि अन्य एसक्यूएल बोलियों में 'एएस' अनिवार्य है। – Bryan

2
INSERT INTO Table1(Column1,Column2..) SELECT Column1,Column2.. FROM Table2 [WHERE <condition>] 
+1

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, यह समझाना बेहतर होगा कि यह समस्या को हल करता है और इसका उपयोग क्यों किया जाता है। कोड-केवल उत्तर लंबे समय तक उपयोगी नहीं होते हैं। –

0

ऊपर क्वेरी ही काम करता है हम ग्राहक की मिलान कॉलम के साथ ग्राहकों को टेबल बनाया है यदि

INSERT INTO clients(c_id,name,address)SELECT c_id,name,address FROM customer 
3
CREATE TABLE newTable LIKE oldTable; 

फिर,

INSERT INTO newTable SELECT * FROM oldTable; 
0

पर डेटा कॉपी करने के लिए आप इस कोड को आजमा सकते हैं

insert into #temp 
select Product_ID,Max(Grand_Total) AS 'Sales_Amt', Max(Rec_Amount) ,'','' 
from Table_Name group by Id 
संबंधित मुद्दे

 संबंधित मुद्दे