Jak połączyć dwie tabele MySQL?
Jak połączyć dwie tabele MySQL o tej samej strukturze?
Podstawowe klucze obu tabel będą się ze sobą kolidować, więc wziąłem to pod uwagę.
6 answers
Możesz również spróbować:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
Który pozwala tym wierszom w tabeli_1 zastąpić te w tabeli_2, które mają pasujący klucz podstawowy, jednocześnie wstawiając wiersze z nowymi kluczami podstawowymi.
Alternatywnie,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
Zaktualizuje te wiersze już w tabeli_1 o odpowiedni wiersz z tabeli_2, wstawiając wiersze z nowymi kluczami podstawowymi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-07 13:04:18
To zależy od semantyki klucza głównego. Jeśli to tylko autoincrement, to użyj czegoś w stylu:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Jeśli PK coś znaczy, musisz znaleźć sposób, aby określić, który rekord powinien mieć priorytet. Możesz utworzyć zapytanie select, aby najpierw znaleźć duplikaty (Zobacz odpowiedź cpitis ). Następnie wyeliminuj te, których nie chcesz zachować i użyj powyższej wstawki, aby dodać rekordy, które pozostały.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:20
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-05 13:32:14
Jeśli musisz zrobić to ręcznie, jeden raz:
Najpierw połącz w tymczasowej tabeli, z czymś w rodzaju:
create table MERGED as select * from table 1 UNION select * from table 2
Następnie zidentyfikuj podstawowe ograniczenia klucza za pomocą czegoś w rodzaju
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Gdzie PK jest głównym polem klucza...
Rozwiąż duplikaty.
Zmień nazwę tabeli.
[edited-usunięto nawiasy w zapytaniu UNION, co powodowało błąd w komentarzu poniżej]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-28 11:34:42
Nie tak skomplikowane, jak się wydaje.... Po prostu zostaw zduplikowany klucz podstawowy z twojego zapytania.... to mi pasuje !
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 18:57:52
Możesz napisać skrypt, który zaktualizuje FK za Ciebie.. zobacz ten blog: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Mają sprytny skrypt do korzystania z tabel information_schema, aby uzyskać kolumny "id":
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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-20 13:35:19