Обновите определенное поле в дубликате ключа, если выполняется определенное условие

У меня есть таблица, в которую я загружаю данные из файлов CSV.

Поля выглядят следующим образом:

StudentName | SubjectName| Result
---------------------------------
Adam        | Math       | Fail
Bob         | History    | Pass
Catherine   | Math       | Pass
Dave        | Science    | Fail
Evan        | History    | Pass

Первичный ключ здесь (StudentName, SubjectName)

Я использую следующий код, чтобы получить данные в таблицу:

Load data local infile 'C:\\Test.csv' INTO TABLE test_table
Fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
Lines terminated by '\n'
ignore 1 lines;

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

то есть: если есть дубликат, UPDATE field RESULT if : value for result in the duplicate entry is "Pass". каждый файл csv будет соответствовать каждому дню проведения тестов. Если учащийся получил пропуск хотя бы один раз, это должно быть отражено в таблице.

Как я должен изменить свой код, чтобы это произошло?


person Kumaran Senapathy    schedule 03.04.2013    source источник


Ответы (2)


Я бы сначала загружал каждый новый файл во временную таблицу. Это дает больше возможностей при вставке в реальную таблицу. Что-то вроде:

  1. ЗАГРУЗИТЬ ФАЙЛ ДАННЫХ... В ТАБЛИЦУ временной_тестовой_таблицы
  2. ВСТАВИТЬ В тестовую_таблицу ВЫБРАТЬ * ИЗ временной_тестовой_таблицы НА ДОПОЛНИТЕЛЬНОМ КЛЮЧЕ...
  3. TRUNCATE временная_тестовая_таблица
person Andreas Wederbrand    schedule 03.04.2013
comment
ON Дублирующий ключ: это то, где мне больше всего нужна помощь. Как я могу указать условие и после этого обновить определенное поле? - person Kumaran Senapathy; 03.04.2013

Сам сценарий загрузки не может помочь вам выполнять вставку и обновление таблицы одновременно. Вы можете сначала загрузить свой CSV-файл во временную таблицу, затем использовать скрипт для выполнения «Upsert» в вашей окончательной таблице, после чего обрезать временную таблицу или каждый раз создавать и удалять временную таблицу. Добавьте ссылку для справки

person ljh    schedule 03.04.2013