2013-04-06 104 views
1

我有一个MySQL表和大型文本文件的值由制表符分隔。该文件可能包含重复项。这是一个例子:加载文本文件到数据库合并重复

foo \t 5 
bar \t 42 
etc \t 22 
bar \t 50 
oth \t 12 

而且,每个文件可能包含根据另一个文件的重复项。例如:

abc \t 33 
foo \t 10 

我想加载这些文件到表中,以便重复应该合并(汇总数字)。之后importint这两个文件,数据库应该是这样的:

| text | num | 
+------+-----+ 
| foo | 15 | 
| bar | 92 | 
| etc | 22 | 
| oth | 12 | 
| abc | 33 | 

这是命令我已经知道:

  • 加载文本文件:

    LOAD DATA INFILE “file.txt的” INTO TABLE'table`场'T'终止'\ t';

  • 具有重复
  • 选择行:

    SELECT * FROM`table` GROUP BY`text` HAVING COUNT(*)> 1;

回答

0

所以,我找到了一个方法来实现这个目标。

创建主表:

CREATE TABLE IF NOT EXISTS `test` 
(`text` VARCHAR(255) NOT NULL, `num` INT(11) NOT NULL); 

加载文件到表:

LOAD DATA LOCAL INFILE 'local/path/to/file.txt' 
INTO TABLE `test` FIELDS TERMINATED BY '\t'; 

与重复合计数值创建一个临时表:

CREATE TEMPORARY TABLE `test_tmp` 
SELECT `text`,SUM(`num`) FROM `test` 
GROUP BY `text` HAVING COUNT(*) > 1; 

从主删除重复表:

DELETE FROM `test` WHERE `text` 
IN (SELECT `text` FROM `test_tmp`); 

将数据复制到主表:

INSERT INTO `test` SELECT * FROM `test_tmp`; 

删除临时表:

DROP TEMPORARY TABLE `test_tmp`; 

有没有什么更好的方法来做到这一点?

相关问题