我有一个 MySQL 表和大型文本文件,其中的值由制表符分隔。此文件可能包含重复项。这是一个例子:
foo \t 5
bar \t 42
etc \t 22
bar \t 50
oth \t 12
此外,根据其他文件,每个文件可能包含重复项。例如:
abc \t 33
foo \t 10
我想将这些文件加载到表中,以便合并重复项(对数字求和)。导入这两个文件后,数据库应如下所示:
| text | num |
+------+-----+
| foo | 15 |
| bar | 92 |
| etc | 22 |
| oth | 12 |
| abc | 33 |
这些是我已经知道的命令:
加载文本文件:
LOAD DATA INFILE "file.txt"INTO TABLE `table` FIELDS TERMINATED BY '\t';
选择有重复的行:
SELECT * FROM `table` GROUP BY `text` HAVING COUNT(*) > 1;
最佳答案
所以,我找到了实现这一目标的方法。
创建主表:
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`;
有更好的方法吗?
关于mysql - 将文本文件加载到数据库中合并重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851497/