我有一个有趣的问题,我肯定有一个简单的答案,但我似乎无法在文档中找到它。
我在不同的服务器上有两个独立的数据库表。它们都是具有相同主键的相同表模式。
我想在一台服务器上将表合并在一起。但是,如果Server1.Table1上的行存在于Server2.Table2中,那么总结我指定的列中的总数。
表1 { column_pk,counter }; “test1”,3 “test2”,4
表2 { column_pk,counter }; “test1”,5 “test2”,6
所以我合并后我想:
“测试1”,8 “TEST2”,10
基本上我需要做一个mysqldump但是它没有踢掉原始的INSERT语句,我需要做一个INSERT..ON DUPLICATE KEY UPDATE语句。
我有什么选择?
感谢任何输入,谢谢
答案 0 :(得分:0)
INSERT INTO table_new (column_pk, counter) VALUES ('test',4)
ON DUPLICATE KEY UPDATE c=c+4;
4
和test
替换为您的实际数据。
至于如何实现包含这些查询的导出文件,我建议您使用正则表达式来修改标准导出。或者将它们插入同一个表格中,并按照Anax
的建议加以总结答案 1 :(得分:0)
您可以使用查询将所需结果选择到新文件中:
SELECT column_pk, SUM(counter) FROM
(
SELECT column_pk, counter FROM Server1.Table1
UNION ALL column_pk, counter FROM Server2.Table2
) data
GROUP BY column_pk
INTO OUTFILE "dump.txt"
然后,您可以使用LOAD DATA INFILE
将此文件加载到目标服务器中编辑:这里“Server1.Table1”是一个假名 - 你不能真正写出来。要从其他服务器上的表中读取它们就像是本地的,请使用federated storage engine。
答案 2 :(得分:0)
我会把两个表扔进一个新表(new_pk,old_column_pk,old_counter)然后
SELECT DISTINCT old_column_pk AS column_pk, SUM(old_counter) AS counter
FROM newtable GROUP BY old_column_pk
作为我的最终数据