Ответ 1
Создайте индекс UNIQUE в столбце возраста, затем:
LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
Я столкнулся с некоторыми проблемами с использованием команды LOAD DATA INFILE, поскольку я хотел игнорировать строки, которые уже были в базе данных. Если у меня есть таблица с данными следующим образом,
id |name |age
--------------------
1 |aaaa |22
2 |bbbb |21
3 |bbaa |20
4 |abbb |22
5 |aacc |22
Где id - значение автоматического увеличения. файл csv я содержит следующие данные,
"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"
Я хочу игнорировать строки,
"aaaa","22"
"abbb","22"
"aacc","22"
и загрузить остальные в таблицу. и запрос, который у меня есть, который загружает все в таблицу, выглядит следующим образом:
LOAD DATA INFILE 'member.csv'
INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
ПОЖАЛУЙСТА, помогите мне в этой задаче.. Будет очень благодарен. Я пробовал много ссылок, но не помогал: (
Создайте индекс UNIQUE в столбце возраста, затем:
LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
Один из подходов - использовать временную таблицу. Загрузите это и используйте SQL для обновления tbl_member из таблицы temp.
INSERT INTO tbl_member
SELECT Field1,Field2,Field3,...
FROM temp_table
WHERE NOT EXISTS(SELECT *
FROM tbl_member
WHERE (temp_table.Field1=tbl_member.Field1 and
temp_table.Field2=tbl_member.Field2...etc.)
)
Вы можете создать уникальный индекс для нескольких столбцов. LOAD DATA не будет вставлять строки, которые соответствуют существующим строкам во всех этих столбцах.
например, ALTER TABLE tbl_member ADD UNIQUE unique_index (имя, возраст)