2013-04-03 7 views
0

У меня есть таблица, в которую я загружаю данные из 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, которые мне нужно импортировать. Могут быть возможные ключевые дубликаты. Я пытаюсь обновить определенное поле, когда встречается дубликат.

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

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

ответ

0

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

  1. LOAD DATA FILE ... INTO TABLE temporary_test_table
  2. INSERT INTO test_table SELECT * FROM temporary_test_table ON DUPLICATE KEY ...
  3. TRUNCATE temporary_test_table
+0

ON дубликата ключа: где мне нужно больше всего помощи. Как я могу указать условие и обновить определенное поле после этого? –

0

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