Aynı yapıya sahip iki MySQL tablasını nasıl birleştirebilirim?İki MySQL tablosunu nasıl birleştirebilirim?
İki tablonun birincil anahtarları çatışacaktır, dolayısıyla bunu dikkate aldım.
Aynı yapıya sahip iki MySQL tablasını nasıl birleştirebilirim?İki MySQL tablosunu nasıl birleştirebilirim?
İki tablonun birincil anahtarları çatışacaktır, dolayısıyla bunu dikkate aldım.
:
hala yeni birincil anahtarlar ile satırları sokulurken, eşleşen bir birincil anahtara sahip olduğunu table_2 olanlar yerini alacak table_1 bu satırları verirINSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
. yeni bir birincil anahtarları ile satır sokulurken
Alternatif
,REPLACE
INTO table_1
SELECT *
FROM table_2
;
zaten table_2 karşılık gelen sıra ile table_1 bu satır güncellenir.
Sen güncellemek için bir komut dosyası yazabilirsiniz, birçok tablodan olabilir mi? – SaidbakR
Aslında, [REPLACE] (http://code.openark.org/blog/mysql/replace-into-think-twice) mevcut satırları (silme + ekleme) güncelleyecektir. –
bunu elle yapmanız gerekiyorsa, bir kez: Sonra
create table MERGED as select * from table 1 UNION select * from table 2
gibi bir şeyle birincil anahtar kısıtlamaları tanımlamak:
Birincisi, böyle bir şeyle, geçici tabloda birleştirme
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
PK birincil anahtar alanıdır
...
dupl çözün icates.
Tabloyu yeniden adlandırın.
[düzenlenebilir - aşağıdaki açıklamada hataya neden oldu UNION terimi uzaklaştırıldı parantez,]
Bunu denediğimde bu hatayı aldım, "ERROR 1064 (42000): SQL sözdiziminde bir hata var; doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen elkitabını kontrol edin '' UNION select * aktörden '' satırında kullanmak için ', neden bu? – jcho360
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)
İyi fikir için teşekkürler. Yukarıdaki cmd bana bir sözdizimi hatası verir. Ama bu benim için çalışıyor: YİNELENEN KEY UPDATE second_table DAN first_table SELECT'te * INTO INSERT second_table.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH – Tapper
Sadece @Tapper gibi (first_table.column1), ilk bir Alias atamak alamadım tablo. Yine de MySQL Workbench aracılığıyla 'Syntax hatası, beklenmedik IDENT_QUOTED 'olurdum. – blo0p3r
Bu birincil anahtarın semantik bağlıdır. PK şey demektir Eğer önceliğe sahip olmalıdır hangi kayıt belirlemek için bir yol bulmalıyız,
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
: sadece autoincrement varsa, bu durumda böyle bir şey kullanın. Önce kopyaları bulmak için bir seçim sorgusu oluşturabilirsiniz (bkz. answer by cpitis). Ardından, kalanları eklemek için yukarıdaki eki kullanmak ve kullanmak istemediğinizi ortadan kaldırın. Ayrıca deneyebilirsiniz
FK Diyelim ki .. Bu blog kontrol için: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Onlar "id" sütunlarını almak için information_schema tabloları kullanmak için bir akıllı komut dosyası vardır:
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[email protected] and column_name like '%id' into outfile 'update_ids.sql';
use id_new
source update_ids.sql;
Göründüğü kadar karmaşık değil .... Sadece yinelenen birincil anahtarını sorgunuzdan çıkartın .... bu benim için çalışıyor!
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
Eğer BA'lar çatışma olabileceğini söylüyorlar yinelenen satırlar olabilir anlamına yapmak ve bunları kopyalanan istiyorsanız veya onlar çünkü bunlardan birine yeni bir PK atamak gerektiğini yok Aynı PK'ye sahip olmasına rağmen gerçekten farklı satırlar?(doğal birincil anahtarları kullanmak için başka bir neden) –