mysql - 将文本文件加载到数据库中合并重复项

标签 mysql load duplicates sum text-files

我有一个 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/

相关文章:

php - 选择条目值为 1 的列名称

xml - 将简单的 XML 文件加载到 Postgres 中

javascript - 在 IE 中使用 JavaScript 将 XML 加载到 DIV 时出现问题

sql - 为什么我使用这些 postgresql 时态数据库模式和查询得到重复的行?

php - 如何使用 MySQL 通过 PHP 向 INSERT 添加日期和时间戳?

mysql - 触发减少计数器

php - 删除单元格 MySQL 中的重复值

mysql - 如何编写 MySQL 选择查询来获取选择列中的重复项,但在另一个列中获取唯一的

python - 如何从 Django 的两列中获取最新的时间戳

R,使用 load() 从 .rda 对象分配内容