1

如何在 MySQL 中合并两个表?我已经查看了有关此主题的其他几篇文章,但它们对我来说不够详细。

我是 MySQL 新手,所以请耐心等待,我有一个主表和一个临时表,如下所示:

CREATE TABLE temp_import( id int(11) NOT NULL auto_increment,
Namevarchar(255) default NULL,
MerchantIDint(11) default NULL,
SKUvarchar(255) default NULL,
PRIMARY KEY ( id) ) ENGINE=MyISAM AUTO_INCREMENT=765811 DEFAULT CHARSET=utf8;

我将数据插入到临时表中,如下所示:

LOAD DATA LOCAL INFILE \'29762.txt\' REPLACE INTO TABLE temp_import FIELDS TERMINATED BY \'|\' OPTIONALLY ENCLOSED BY \'"\' LINES TERMINATED BY \'\n\' (Name, MerchantID, SKU);

每个表格的表格格式都是一样的,但是数据会随着时间的推移而变化。有些项目的数据机会,但 SKU 保持不变。某些项目将不再提供,需要从数据库中删除。

例子:

当前数据库表:

1, dog, 101, dog101
2, cat, 101, cat101
3, chicken, 102, chicken100
4, chicken food, 102, chicken101

新数据库表:

1, dog, 101, dog101
2, cat, 102, cat101
3, chicken, 102, chicken100
5, Frog, 103, frog101

最终结果应该是

1, dog, 101, dog101
2, cat, 102, cat101
3, chicken, 102, chicken100
5, Frog, 103, frog101

删除了鸡肉食品,添加了青蛙,更新了猫。

这也需要尽可能高效。我将处理一些大文件。它可以是 MySQL 唯一的代码。

http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/ 我看过这个,但它在我头上,当我尝试这样做时它没有不工作...

4

3 回答 3

0

将 SKU 设为主键。从那里你可以做一个INSERT ... SELECT ... ON DUPLICATE KEY UPDATE查询。

于 2011-06-08T05:51:27.910 回答
0

不确定这是否符合您的需求,但似乎您可能需要查看数据。

数据库视图被称为“虚拟表”,它允许您查询其中的数据。

您可以在此处找到有关视图的一些出色信息。我希望这会有所帮助,当您需要不同的数据表示形式时,视图非常强大并且值得研究。

于 2011-06-08T06:01:49.587 回答
0

我想我会发布我最终用于此的内容。这可能不是“最佳”方式,删除列是完全可选的。

ALTER TABLE `temp_import`
ADD `deleteme` tinyint NOT NULL
DEFAULT 0; -- If you haven't already added a deleteme column 


UPDATE `temp_import` SET  `deleteme` = 1; -- Set the delete field 

LOAD DATA LOW_PRIORITY LOCAL INFILE "import.csv" REPLACE INTO TABLE `temp_import`  FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\n"  IGNORE 1 LINES (`id`, `name`, `m_id`, `sku`);

DELETE FROM `temp_import` WHERE  `deleteme` = 1;

ALTER TABLE `tests` DROP COLUMN `deleteme` -- Optional
于 2012-03-29T01:44:42.253 回答