2013-04-06 74 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`; 

有沒有什麼更好的方法來做到這一點?

相關問題