একই কাঠামোযুক্ত দুটি মাইএসকিউএল টেবিলকে আমি কীভাবে মার্জ করব?
দুটি টেবিলের প্রাথমিক কীগুলি সংঘর্ষ হবে, তাই আমি এটি অ্যাকাউন্টে নিয়েছি।
একই কাঠামোযুক্ত দুটি মাইএসকিউএল টেবিলকে আমি কীভাবে মার্জ করব?
দুটি টেবিলের প্রাথমিক কীগুলি সংঘর্ষ হবে, তাই আমি এটি অ্যাকাউন্টে নিয়েছি।
উত্তর:
আপনিও চেষ্টা করতে পারেন:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
যা এখনও টেবিল_1 এ থাকা সারিগুলিকে টেবিল_2 এ মেশানো প্রাথমিক কী রয়েছে তার পরেও নতুন প্রাথমিক কী সহ সারিগুলি সন্নিবেশ করানোর অনুমতি দেয়।
বিকল্পভাবে,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
নতুন প্রাথমিক কীগুলির সাথে সারিগুলি সন্নিবেশ করার সময়, টেবিল_2 থেকে সংশ্লিষ্ট সারিটি ইতিমধ্যে টেবিল_1 এ থাকা সারিগুলি আপডেট করবে।
এটি প্রাথমিক কী এর শব্দার্থবিজ্ঞানের উপর নির্ভর করে। যদি এটি কেবল স্ব-স্বীকৃতি হয় তবে এর মতো কিছু ব্যবহার করুন:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
পিকে যদি কিছু বোঝায়, কোন রেকর্ডটির অগ্রাধিকার থাকা উচিত তা নির্ধারণ করার জন্য আপনাকে একটি উপায় সন্ধান করতে হবে। আপনি প্রথমে সদৃশ সন্ধানের জন্য একটি নির্বাচিত ক্যোয়ারী তৈরি করতে পারেন ( সিপাইটিসের উত্তর দেখুন )। তারপরে রেকর্ডগুলি যুক্ত করতে উপরের সন্নিবেশটিকে আপনি রাখতে চান না এবং ব্যবহার করতে চান না তা মুছে দিন।
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
যেভাবেই হোক মাইএসকিউএল ওয়ার্কবেঞ্চের মাধ্যমে পেয়ে যাব ।
আপনার যদি নিজে থেকে এটি করার প্রয়োজন হয় তবে একবার:
প্রথমে অস্থায়ী সারণীতে মার্জ করুন, এর মতো কিছু দিয়ে:
create table MERGED as select * from table 1 UNION select * from table 2
তারপরে, প্রাথমিক কী বাধার মতো কিছু দিয়ে চিহ্নিত করুন
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
যেখানে পিকে প্রাথমিক কী ক্ষেত্র ...
সদৃশগুলি সমাধান করুন।
টেবিলটির নতুন নাম দিন।
[সম্পাদিত - ইউনিয়ন কোয়েরিতে ব্র্যাকেটগুলি সরানো হয়েছে, যা নীচের মন্তব্যে ত্রুটি সৃষ্টি করেছিল]
এটি যতটা জটিল শোনাচ্ছে ততটা জটিল নয় .... কেবলমাত্র আপনার প্রশ্নের বাইরে সদৃশ প্রাথমিক কীটি ছেড়ে দিন .... এটি আমার পক্ষে কাজ করে!
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
আপনার জন্য এফকে আপডেট করার জন্য আপনি একটি স্ক্রিপ্ট লিখতে পারেন .. এই ব্লগটি পরীক্ষা করে দেখুন: http://multunus.com/2011/03/how-to-easily-mitted-two-identical-mysQL- ডেটাবেসস /
"আইডি" কলাম পেতে তথ্য_স্কেমার টেবিলগুলি ব্যবহার করার জন্য তাদের কাছে একটি চতুর স্ক্রিপ্ট রয়েছে:
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;