Как загрузить данные из файла без повторения записей - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть текстовый файл, который содержит поля, разделенные запятыми. Записи в файле могут быть продублированы. Однако, когда я вставляю их в базу данных, я хочу вставить первое вхождение записи и игнорировать любые повторяющиеся (на основе значения первого поля, которое должно быть уникальным).

Вот мое утверждение, которое вызывает ошибки из-за повторяющихся значений первого поля, которое я отмечаю как уникальное.

LOAD DATA LOCAL INFILE '/var/lib/mysql-files/myfile.txt'
INTO TABLE `scheme`.`mytable` fields terminated BY ',';

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Получилось легко.Просто используйте IGNORE, и MySQL будет игнорировать повторное появление.

LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
IGNORE INTO TABLE `scheme`.`mytable` fields terminated BY ',';

Тем не менее, это будет игнорировать все остальные ошибки.Так что следует использовать осторожно.

0 голосов
/ 02 апреля 2019

Вы можете использовать loaddata для загрузки строки в таблицу 'temp', тогда

INSERT INTO targetTable (firstField, ...set of columns...)  
  SELECT DISTINCT firstField, ...set of columns... 
    FROM temp 
    WHERE firstField NOT IN (SELECT firstField FROM target);

Требуется: firstField -> набор столбцов (функциональная зависимость)

Или вы можете использовать INSERT with IGNORE (без ошибок при дублировании):

INSERT IGNORE INTO targetTable (firstField, ...set of columns...)
 SELECT DISTINCT firstField, ...set of columns... 
    FROM temp;

или как схемы таблиц одинаковы:

INSERT IGNORE INTO targetTable 
   SELECT * 
    FROM temp;
...