मैं दो MySQL तालिकाओं को कैसे मिला सकता हूं जिनमें समान संरचना है?
दो तालिकाओं की प्राथमिक कुंजी टकराएगी, इसलिए मैंने इसे ध्यान में रखा है।
मैं दो MySQL तालिकाओं को कैसे मिला सकता हूं जिनमें समान संरचना है?
दो तालिकाओं की प्राथमिक कुंजी टकराएगी, इसलिए मैंने इसे ध्यान में रखा है।
जवाबों:
आप भी आजमा सकते हैं:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
जो तालिका 2 में उन पंक्तियों को तालिका 2 में रखने की अनुमति देता है जिनकी मिलान प्राथमिक कुंजी है, जबकि नई प्राथमिक कुंजी के साथ पंक्तियों को सम्मिलित करते समय।
वैकल्पिक रूप से,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
नई प्राथमिक कुंजियों के साथ पंक्तियाँ सम्मिलित करते हुए, तालिका 2 से उन पंक्तियों को तालिका 2 से पहले वाली पंक्ति के साथ अपडेट करेंगे।
यह प्राथमिक कुंजी के शब्दार्थ पर निर्भर करता है। यदि यह सिर्फ संकेत है, तो कुछ का उपयोग करें:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
यदि पीके का अर्थ कुछ है, तो आपको यह निर्धारित करने का तरीका खोजने की आवश्यकता है कि किस रिकॉर्ड में प्राथमिकता होनी चाहिए। आप पहले डुप्लिकेट खोजने के लिए एक चयन क्वेरी बना सकते हैं ( cpitis द्वारा उत्तर देखें )। फिर उन लोगों को समाप्त करें जिन्हें आप रिकॉर्ड रखने के लिए उपरोक्त सम्मिलित करना और उपयोग करना नहीं चाहते हैं।
INSERT
INTO first_table f
SELECT *
FROM second_table s
ON DUPLICATE KEY
UPDATE
s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
Syntax error, unexpected IDENT_QUOTED- MySQL कार्यक्षेत्र के माध्यम से वैसे भी।
यदि आपको इसे मैन्युअल रूप से करने की आवश्यकता है, तो एक बार:
सबसे पहले, एक अस्थायी तालिका में विलय करें, जैसे कुछ:
create table MERGED as select * from table 1 UNION select * from table 2
फिर, कुछ की तरह प्राथमिक कुंजी बाधाओं की पहचान करें
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
जहां पीके प्राथमिक कुंजी क्षेत्र है ...
डुप्लिकेट को हल करें।
तालिका का नाम बदलें।
[संपादित - हटाए गए कोष्ठक UNION क्वेरी में, जो नीचे टिप्पणी में त्रुटि पैदा कर रहा था]
उतना जटिल नहीं है जितना लगता है .... बस डुप्लिकेट प्राथमिक कुंजी को अपनी क्वेरी से बाहर छोड़ दें .... यह मेरे लिए काम करता है!
INSERT INTO
Content(
`status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
)
SELECT `status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
FROM
Content_Images
आप के लिए FK को अद्यतन करने के लिए एक स्क्रिप्ट लिख सकते हैं .. इस ब्लॉग की जाँच करें: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-dat डेटाबेस/
उनके पास "आईडी" कॉलम प्राप्त करने के लिए information_schema तालिकाओं का उपयोग करने के लिए एक चतुर स्क्रिप्ट है:
SET @db:='id_new';
select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;
select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where table_schema=@db and column_name like '%id' into outfile 'update_ids.sql';
use id_new
source update_ids.sql;