2013-08-02 4 views
1

Я застрял в простом запросе обновления. У меня в таблице говорят tabble1, содержащие столбец «name» и «phone_no». Теперь, когда я загружаю файл csv, содержащий список имен и контактных номеров, я хочу обновить имя дубликата с предыдущим. Напр. У меня есть строка, содержащая 'max' '8569589652'. теперь, когда я загружаю тот же номер другим именем, скажите 'stela' '8569589652', тогда stela shuld обновится до макс.mysql-запрос для обновления дублирующих записей

для этой цели я создал другую таблицу say table2. то я собрал все повторяющиеся записи из таблицы1 в таблицу2. после этого обновлена ​​новая запись с предыдущим именем.

следующие мои запросы: собрать все дубликаты записей:

INSERT INTO table2 SELECT phone_no,name FROM table1 
      GROUP BY phone_no HAVING COUNT(*)>1; 

обновить повторяющиеся записи в table1:

UPDATE table1.table2 SET table1.name=table2.name 
     WHERE table1.phone_no=table2.phone_no ; 

Моя проблема в том, когда я запускаю эти два запроса он берет tooo много времени. Он занимает руду, чем через полчаса, чтобы загрузить файл csv из 1000 номеров. Пожалуйста, предложите мне оптимизировать запрос для загрузки csv за меньшее время.

действительно скорость загрузки предметов с размером базы данных. , пожалуйста, помогите.

Заранее благодарим.

ответ

1

Вот шаги из предложенной мной ссылки.

1) Создайте новую временную таблицу.

CREATE TEMPORARY TABLE temporary_table LIKE target_table; 

2) При необходимости, отбросьте все индексы из временной таблицы, чтобы ускорить работу.

SHOW INDEX FROM temporary_table; 
DROP INDEX `PRIMARY` ON temporary_table; 
DROP INDEX `some_other_index` ON temporary_table; 

3) Загрузить CSV во временную таблицу

LOAD DATA INFILE 'your_file.csv' 
INTO TABLE temporary_table 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
(field1, field2); 

4) Скопировать данные с помощью ПО DUPLICATE KEY UPDATE

SHOW COLUMNS FROM target_table; 
INSERT INTO target_table 
SELECT * FROM temporary_table 
ON DUPLICATE KEY UPDATE field1 = VALUES(field1), field2 = VALUES(field2); 

5) Удалите временную таблицу

DROP TEMPORARY TABLE temporary_table; 
+0

Я использую следующий запрос для загрузки CSV файла: LOAD DATA INFILE '$ имя_файла' INTO TABLE импорт ПЛОЩАДКИ расторгнута '|' ЛИНИИ TERMINATED BY '\ п' ИГНОРИРУЙТЕ 1 ЛИНИЮ (@ srno, @ customer_name, @ mobno) SET customer_name = @ customer_name, mobno = @ mobno, дата и время = '$ DateTime' пожалуйста, помогите мне написать дублирование KEY UPDATE с этим запросом –

+0

? разместите его здесь. – cartina

+0

ОК. Pls проверит эту ссылку и выполнит следующие шаги. http://stackoverflow.com/questions/15271202/mysql-load-data-infile-with-on-duplicate-key-update – cartina

0

Дамп CSV-файла в темпе Таблица.

Тогда APLY сливаться заявление просто

Merge AS MAIN ИСПОЛЬЗОВАНИЕ AS TEMP

На MAIN.CONTACT_NO = TEMP.CONTACT_NO когда подобрано THEN UPDATE MAIN.NAME = TEMP.NAME; ЕСЛИ ВЫ ХОТИТЕ Вставляйте MATCHING RECORD USE THIS КОГДА НЕ MATCHED THEN INSERT

(NAME, CONTACT_NO) ЗНАЧЕНИЯ ( TEMP.NAME, TEMP.CONTACT_NO );

Пожалуйста, не следует, что команда слияния должна заканчиваться символом ';' Я использовал ';' после upadate удалите это и добавьте нижнюю часть и завершите все слияние с помощью;;

Надеется, что это помогает

Пожалуйста, обновите, если больше необходима помощи.

+0

пожалуйста, примите слияния systax от http://technet.microsoft.com/en-us/library/bb510625.aspx некоторые как systax потеряли при публикации –

+0

OP использует MySql не Sql-сервер – peterm

0

Вы можете обновить дубликаты записей «нет телефона», как показано ниже.

INSERT INTO table2 (phone_no,name) 
     VALUES 
     ('11111', aaa), 
     ('22222', bbb), 
     ('33333', cccc), 
ON DUPLICATE KEY UPDATE 
    phone_no = VALUES(phone_no); 
+0

, я должен добавить уникальный ключ в столбец phone_no .. ?? или он будет работать без. –

+0

Я использую следующий запрос для загрузки файла csv: LOAD DATA INFILE '$ file_name' INTO TABLE import FIELDS TERMINATED BY '|' ЛИНИИ, ПРЕРЫВАННЫЕ «\ n» IGNORE 1 LINES (@ srno, @ customer_name, @ mobno) SET имя_пользователя = @ имя_пользователя, mobno = @ mobno, datetime = '$ datetime', пожалуйста, помогите мне написать инструкцию ON DUPLICATE KEY UPDATE с этим –

Смежные вопросы