如何在MySQL中合并两个表,哪个表是主要的

时间:2011-06-08 05:30:29

标签: mysql join sql-delete sql-merge

如何在MySQL中合并两个表? 我已经看了几篇关于这个主题的帖子,但是我没有详细介绍。

我是一个新手MySQL用户,所以忍受我,我有一个主表和一个临时表,如下所示:

  

CREATE TABLE temp_importid   int(11)NOT NULL auto_increment,
  Name varchar(255)默认为NULL,
  MerchantID int(11)默认为NULL,
  SKU varchar(255)默认为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

删除了鸡肉食品,Frog补充道,更新了猫。

此外,这需要尽可能高效。我将使用一些大文件。它可以是MySQL唯一的代码。

http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/我已经看过这个,但它已经超出了我的想象,当我尝试这样做时它不起作用......

3 个答案:

答案 0 :(得分:0)

将SKU改为主键。从那里你可以进行INSERT ... SELECT ... ON DUPLICATE KEY UPDATE查询。

答案 1 :(得分:0)

不确定这是否符合您的需求,但您的数据似乎需要view

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

您可以找到有关观看right here的一些优秀信息。我希望有所帮助,观点非常强大,值得在需要不同的数据表示时进行调查。

答案 2 :(得分: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